kibi-swipl-linux-x64-gnu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,1016 @@
1
+ /* Part of CHR (Constraint Handling Rules)
2
+
3
+ Author: Christian Holzbaur and Tom Schrijvers
4
+ E-mail: christian@ai.univie.ac.at
5
+ Tom.Schrijvers@cs.kuleuven.be
6
+ WWW: http://www.swi-prolog.org
7
+ Copyright (c) 2004-2015, K.U. Leuven
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37
+ %% _ _ _
38
+ %% ___| |__ _ __ _ __ _ _ _ __ | |_(_)_ __ ___ ___
39
+ %% / __| '_ \| '__| | '__| | | | '_ \| __| | '_ ` _ \ / _ \
40
+ %% | (__| | | | | | | | |_| | | | | |_| | | | | | | __/
41
+ %% \___|_| |_|_| |_| \__,_|_| |_|\__|_|_| |_| |_|\___|
42
+ %%
43
+ %% hProlog CHR runtime:
44
+ %%
45
+ %% * based on the SICStus CHR runtime by Christian Holzbaur
46
+ %%
47
+ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48
+ %% % Constraint Handling Rules version 2.2 %
49
+ %% % %
50
+ %% % (c) Copyright 1996-98 %
51
+ %% % LMU, Muenchen %
52
+ %% % %
53
+ %% % File: chr.pl %
54
+ %% % Author: Christian Holzbaur christian@ai.univie.ac.at %
55
+ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56
+ %%
57
+ %%
58
+ %% * modified by Tom Schrijvers, K.U.Leuven, Tom.Schrijvers@cs.kuleuven.be
59
+ %% - ported to hProlog
60
+ %% - modified for eager suspension removal
61
+ %%
62
+ %% * First working version: 6 June 2003
63
+ %%
64
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65
+ %% SWI-Prolog changes
66
+ %%
67
+ %% * Added initialization directives for saved-states
68
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69
+
70
+ :- module(chr_runtime,
71
+ [ 'chr sbag_del_element'/3,
72
+ 'chr merge_attributes'/3,
73
+
74
+ 'chr run_suspensions'/1,
75
+ 'chr run_suspensions_loop'/1,
76
+
77
+ 'chr run_suspensions_d'/1,
78
+ 'chr run_suspensions_loop_d'/1,
79
+
80
+ 'chr insert_constraint_internal'/5,
81
+ 'chr remove_constraint_internal'/2,
82
+ 'chr allocate_constraint'/4,
83
+ 'chr activate_constraint'/3,
84
+
85
+ 'chr default_store'/1,
86
+
87
+ 'chr via_1'/2,
88
+ 'chr via_2'/3,
89
+ 'chr via'/2,
90
+ 'chr newvia_1'/2,
91
+ 'chr newvia_2'/3,
92
+ 'chr newvia'/2,
93
+
94
+ 'chr lock'/1,
95
+ 'chr unlock'/1,
96
+ 'chr not_locked'/1,
97
+ 'chr none_locked'/1,
98
+
99
+ 'chr error_lock'/1,
100
+ 'chr unerror_lock'/1,
101
+ 'chr not_error_locked'/1,
102
+ 'chr none_error_locked'/1,
103
+
104
+ 'chr update_mutable'/2,
105
+ 'chr get_mutable'/2,
106
+ 'chr create_mutable'/2,
107
+
108
+ 'chr novel_production'/2,
109
+ 'chr extend_history'/2,
110
+ 'chr empty_history'/1,
111
+
112
+ 'chr gen_id'/1,
113
+
114
+ 'chr debugging'/0,
115
+ 'chr debug_event'/1,
116
+ 'chr debug command'/2, % Char, Command
117
+
118
+ 'chr chr_indexed_variables'/2,
119
+
120
+ 'chr all_suspensions'/3,
121
+ 'chr new_merge_attributes'/3,
122
+ 'chr normalize_attr'/2,
123
+
124
+ 'chr select'/3,
125
+
126
+ 'chr module'/1, % ?Module
127
+
128
+ chr_show_store/1, % +Module
129
+ find_chr_constraint/1, % -Constraint
130
+ current_chr_constraint/1, % :Constraint
131
+
132
+ chr_trace/0,
133
+ chr_notrace/0,
134
+ chr_leash/1
135
+ ]).
136
+
137
+ %% SWI begin
138
+ :- set_prolog_flag(generate_debug_info, false).
139
+ :- use_module(library(modules), [current_temporary_module/1]).
140
+ %% SWI end
141
+
142
+ :- meta_predicate
143
+ current_chr_constraint(:).
144
+
145
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
146
+
147
+ :- use_module(library(dialect/hprolog)).
148
+ :- include(chr_op).
149
+
150
+ %% SICStus begin
151
+ %% :- use_module(hpattvars).
152
+ %% :- use_module(b_globval).
153
+ %% SICStus end
154
+
155
+
156
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
157
+
158
+ % I N I T I A L I S A T I O N
159
+
160
+ %% SWI begin
161
+ :- dynamic user:exception/3.
162
+ :- multifile user:exception/3.
163
+
164
+ user:exception(undefined_global_variable, Name, retry) :-
165
+ chr_runtime_global_variable(Name),
166
+ chr_init.
167
+
168
+ chr_runtime_global_variable(chr_id).
169
+ chr_runtime_global_variable(chr_global).
170
+ chr_runtime_global_variable(chr_debug).
171
+ chr_runtime_global_variable(chr_debug_history).
172
+
173
+ chr_init :-
174
+ nb_setval(chr_id,0),
175
+ nb_setval(chr_global,_),
176
+ nb_setval(chr_debug,mutable(off)), % XXX
177
+ nb_setval(chr_debug_history,mutable([],0)). % XXX
178
+ %% SWI end
179
+
180
+ %% SICStus begin
181
+ %% chr_init :-
182
+ %% nb_setval(chr_id,0).
183
+ %% SICStus end
184
+
185
+ :- initialization chr_init.
186
+
187
+
188
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
189
+ % Contents of former chr_debug.pl
190
+ %
191
+ % chr_show_store(+Module)
192
+ %
193
+ % Prints all suspended constraints of module Mod to the standard
194
+ % output.
195
+
196
+ chr_show_store(Mod) :-
197
+ (
198
+ Mod:'$enumerate_constraints'(Constraint),
199
+ print(Constraint),nl, % allows use of portray to control printing
200
+ fail
201
+ ;
202
+ true
203
+ ).
204
+
205
+ %% find_chr_constraint(-Constraint) is nondet.
206
+ %
207
+ % True when Constraint is a currently known constraint in any
208
+ % known CHR module.
209
+ %
210
+ % @deprecated current_chr_constraint/1 handles modules.
211
+
212
+ find_chr_constraint(Constraint) :-
213
+ 'chr module'(Mod),
214
+ Mod:'$enumerate_constraints'(Constraint).
215
+
216
+ %% current_chr_constraint(:Constraint) is nondet.
217
+ %
218
+ % True if Constraint is a constraint associated with the qualified
219
+ % module.
220
+
221
+ current_chr_constraint(Mod:Constraint) :-
222
+ 'chr module'(Mod),
223
+ Mod:'$enumerate_constraints'(Constraint).
224
+
225
+ %% 'chr module'(?Module)
226
+ %
227
+ % True when Module is a CHR module. The first clause deals with
228
+ % normal modules. The second with temporary modules, which are not
229
+ % allowed to generate clauses for chr:'$chr_module'/1.
230
+
231
+ 'chr module'(Module) :-
232
+ chr:'$chr_module'(Module).
233
+ :- if(current_prolog_flag(dialect, swi)).
234
+ 'chr module'(Module) :-
235
+ current_temporary_module(Module),
236
+ current_predicate(Module:'$chr_initialization'/0),
237
+ \+ predicate_property(Module:'$chr_initialization', imported_from(_)).
238
+ :- endif.
239
+
240
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
241
+ % Inlining of some goals is good for performance
242
+ % That's the reason for the next section
243
+ % There must be correspondence with the predicates as implemented in chr_mutable.pl
244
+ % so that user:goal_expansion(G,G). also works (but do not add such a rule)
245
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
246
+
247
+ %% SWI begin
248
+ :- multifile user:goal_expansion/2.
249
+ :- dynamic user:goal_expansion/2.
250
+
251
+ user:goal_expansion('chr get_mutable'(Val,Var), Var=mutable(Val)).
252
+ user:goal_expansion('chr update_mutable'(Val,Var), setarg(1,Var,Val)).
253
+ user:goal_expansion('chr create_mutable'(Val,Var), Var=mutable(Val)).
254
+ user:goal_expansion('chr default_store'(X), nb_getval(chr_global,X)).
255
+ %% SWI end
256
+
257
+ % goal_expansion seems too different in SICStus 4 for me to cater for in a
258
+ % decent way at this moment - so I stick with the old way to do this
259
+ % so that it doesn't get lost, the code from Mats for SICStus 4 is included in comments
260
+
261
+
262
+ %% Mats begin
263
+ %% goal_expansion('chr get_mutable'(Val,Var), Lay, _M, get_mutable(Val,Var), Lay).
264
+ %% goal_expansion('chr update_mutable'(Val,Var), Lay, _M, update_mutable(Val,Var), Lay).
265
+ %% goal_expansion('chr create_mutable'(Val,Var), Lay, _M, create_mutable(Val,Var), Lay).
266
+ %% goal_expansion('chr default_store'(A), Lay, _M, global_term_ref_1(A), Lay).
267
+ %% Mats begin
268
+
269
+
270
+ %% SICStus begin
271
+ %% :- multifile user:goal_expansion/2.
272
+ %% :- dynamic user:goal_expansion/2.
273
+ %%
274
+ %% user:goal_expansion('chr get_mutable'(Val,Var), get_mutable(Val,Var)).
275
+ %% user:goal_expansion('chr update_mutable'(Val,Var), update_mutable(Val,Var)).
276
+ %% user:goal_expansion('chr create_mutable'(Val,Var), create_mutable(Val,Var)).
277
+ %% user:goal_expansion('chr default_store'(A), global_term_ref_1(A)).
278
+ %% SICStus end
279
+
280
+
281
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
282
+ 'chr run_suspensions'( Slots) :-
283
+ run_suspensions( Slots).
284
+
285
+ 'chr run_suspensions_loop'([]).
286
+ 'chr run_suspensions_loop'([L|Ls]) :-
287
+ run_suspensions(L),
288
+ 'chr run_suspensions_loop'(Ls).
289
+
290
+ run_suspensions([]).
291
+ run_suspensions([S|Next] ) :-
292
+ arg( 2, S, Mref), % ARGXXX
293
+ 'chr get_mutable'( Status, Mref),
294
+ ( Status==active ->
295
+ 'chr update_mutable'( triggered, Mref),
296
+ arg( 4, S, Gref), % ARGXXX
297
+ 'chr get_mutable'( Gen, Gref),
298
+ Generation is Gen+1,
299
+ 'chr update_mutable'( Generation, Gref),
300
+ arg( 3, S, Goal), % ARGXXX
301
+ call( Goal),
302
+ 'chr get_mutable'( Post, Mref),
303
+ ( Post==triggered ->
304
+ 'chr update_mutable'( active, Mref) % catching constraints that did not do anything
305
+ ;
306
+ true
307
+ )
308
+ ;
309
+ true
310
+ ),
311
+ run_suspensions( Next).
312
+
313
+ 'chr run_suspensions_d'( Slots) :-
314
+ run_suspensions_d( Slots).
315
+
316
+ 'chr run_suspensions_loop_d'([]).
317
+ 'chr run_suspensions_loop_d'([L|Ls]) :-
318
+ run_suspensions_d(L),
319
+ 'chr run_suspensions_loop_d'(Ls).
320
+
321
+ run_suspensions_d([]).
322
+ run_suspensions_d([S|Next] ) :-
323
+ arg( 2, S, Mref), % ARGXXX
324
+ 'chr get_mutable'( Status, Mref),
325
+ ( Status==active ->
326
+ 'chr update_mutable'( triggered, Mref),
327
+ arg( 4, S, Gref), % ARGXXX
328
+ 'chr get_mutable'( Gen, Gref),
329
+ Generation is Gen+1,
330
+ 'chr update_mutable'( Generation, Gref),
331
+ arg( 3, S, Goal), % ARGXXX
332
+ (
333
+ 'chr debug_event'(wake(S)),
334
+ call( Goal)
335
+ ;
336
+ 'chr debug_event'(fail(S)), !,
337
+ fail
338
+ ),
339
+ (
340
+ 'chr debug_event'(exit(S))
341
+ ;
342
+ 'chr debug_event'(redo(S)),
343
+ fail
344
+ ),
345
+ 'chr get_mutable'( Post, Mref),
346
+ ( Post==triggered ->
347
+ 'chr update_mutable'( active, Mref) % catching constraints that did not do anything
348
+ ;
349
+ true
350
+ )
351
+ ;
352
+ true
353
+ ),
354
+ run_suspensions_d( Next).
355
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
356
+ % L O C K I N G
357
+ %
358
+ % locking of variables in guards
359
+
360
+ %= IMPLEMENTATION 1: SILENT FAILURE ============================================
361
+
362
+ %- attribute handler -----------------------------------------------------------
363
+ % intercepts unification of locked variable unification
364
+
365
+ :- public locked:attr_unify_hook/2.
366
+ locked:attr_unify_hook(_,_) :- fail.
367
+
368
+ %- locking & unlocking ---------------------------------------------------------
369
+ 'chr lock'(T) :-
370
+ ( var(T)
371
+ -> put_attr(T, locked, x)
372
+ ; term_variables(T,L),
373
+ lockv(L)
374
+ ).
375
+
376
+ lockv([]).
377
+ lockv([T|R]) :- put_attr( T, locked, x), lockv(R).
378
+
379
+ 'chr unlock'(T) :-
380
+ ( var(T)
381
+ -> del_attr(T, locked)
382
+ ; term_variables(T,L),
383
+ unlockv(L)
384
+ ).
385
+
386
+ unlockv([]).
387
+ unlockv([T|R]) :- del_attr( T, locked), unlockv(R).
388
+
389
+ %- checking for locks ----------------------------------------------------------
390
+
391
+ 'chr none_locked'( []).
392
+ 'chr none_locked'( [V|Vs]) :-
393
+ ( get_attr(V, locked, _) ->
394
+ fail
395
+ ;
396
+ 'chr none_locked'(Vs)
397
+ ).
398
+
399
+ 'chr not_locked'(V) :-
400
+ ( var( V) ->
401
+ ( get_attr( V, locked, _) ->
402
+ fail
403
+ ;
404
+ true
405
+ )
406
+ ;
407
+ true
408
+ ).
409
+
410
+ %= IMPLEMENTATION 2: EXPLICT EXCEPTION =========================================
411
+
412
+ %- LOCK ERROR MESSAGE ----------------------------------------------------------
413
+ lock_error(Term) :-
414
+ throw(error(instantation_error(Term),context(_,'CHR Runtime Error: unification in guard not allowed!'))).
415
+
416
+ %- attribute handler -----------------------------------------------------------
417
+ % intercepts unification of locked variable unification
418
+
419
+ error_locked:attr_unify_hook(_,Term) :- lock_error(Term).
420
+
421
+ %- locking & unlocking ---------------------------------------------------------
422
+ 'chr error_lock'(T) :-
423
+ ( var(T)
424
+ -> put_attr(T, error_locked, x)
425
+ ; term_variables(T,L),
426
+ error_lockv(L)
427
+ ).
428
+
429
+ error_lockv([]).
430
+ error_lockv([T|R]) :- put_attr( T, error_locked, x), error_lockv(R).
431
+
432
+ 'chr unerror_lock'(T) :-
433
+ ( var(T)
434
+ -> del_attr(T, error_locked)
435
+ ; term_variables(T,L),
436
+ unerror_lockv(L)
437
+ ).
438
+
439
+ unerror_lockv([]).
440
+ unerror_lockv([T|R]) :- del_attr( T, error_locked), unerror_lockv(R).
441
+
442
+ %- checking for locks ----------------------------------------------------------
443
+
444
+ 'chr none_error_locked'( []).
445
+ 'chr none_error_locked'( [V|Vs]) :-
446
+ ( get_attr(V, error_locked, _) ->
447
+ fail
448
+ ;
449
+ 'chr none_error_locked'(Vs)
450
+ ).
451
+
452
+ 'chr not_error_locked'(V) :-
453
+ ( var( V) ->
454
+ ( get_attr( V, error_locked, _) ->
455
+ fail
456
+ ;
457
+ true
458
+ )
459
+ ;
460
+ true
461
+ ).
462
+
463
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
464
+ %
465
+ % Eager removal from all chains.
466
+ %
467
+ 'chr remove_constraint_internal'( Susp, Agenda) :-
468
+ arg( 2, Susp, Mref), % ARGXXX
469
+ 'chr get_mutable'( State, Mref),
470
+ 'chr update_mutable'( removed, Mref), % mark in any case
471
+ ( compound(State) -> % passive/1
472
+ Agenda = []
473
+ ; State==removed ->
474
+ Agenda = []
475
+ %; State==triggered ->
476
+ % Agenda = []
477
+ ;
478
+ Susp =.. [_,_,_,_,_,_,_|Args],
479
+ term_variables( Args, Vars),
480
+ 'chr default_store'( Global),
481
+ Agenda = [Global|Vars]
482
+ ).
483
+
484
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
485
+ 'chr newvia_1'(X,V) :-
486
+ ( var(X) ->
487
+ X = V
488
+ ;
489
+ nonground(X,V)
490
+ ).
491
+
492
+ 'chr newvia_2'(X,Y,V) :-
493
+ ( var(X) ->
494
+ X = V
495
+ ; var(Y) ->
496
+ Y = V
497
+ ; compound(X), nonground(X,V) ->
498
+ true
499
+ ;
500
+ compound(Y), nonground(Y,V)
501
+ ).
502
+
503
+ %
504
+ % The second arg is a witness.
505
+ % The formulation with term_variables/2 is
506
+ % cycle safe, but it finds a list of all vars.
507
+ % We need only one, and no list in particular.
508
+ %
509
+ 'chr newvia'(L,V) :- nonground(L,V).
510
+ %~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
511
+
512
+ 'chr via_1'(X,V) :-
513
+ ( var(X) ->
514
+ X = V
515
+ ; atomic(X) ->
516
+ 'chr default_store'(V)
517
+ ; nonground(X,V) ->
518
+ true
519
+ ;
520
+ 'chr default_store'(V)
521
+ ).
522
+
523
+ 'chr via_2'(X,Y,V) :-
524
+ ( var(X) ->
525
+ X = V
526
+ ; var(Y) ->
527
+ Y = V
528
+ ; compound(X), nonground(X,V) ->
529
+ true
530
+ ; compound(Y), nonground(Y,V) ->
531
+ true
532
+ ;
533
+ 'chr default_store'(V)
534
+ ).
535
+
536
+ %
537
+ % The second arg is a witness.
538
+ % The formulation with term_variables/2 is
539
+ % cycle safe, but it finds a list of all vars.
540
+ % We need only one, and no list in particular.
541
+ %
542
+ 'chr via'(L,V) :-
543
+ ( nonground(L,V) ->
544
+ true
545
+ ;
546
+ 'chr default_store'(V)
547
+ ).
548
+
549
+ :- if(\+current_predicate(nonground/2)).
550
+ nonground( Term, V) :-
551
+ term_variables( Term, Vs),
552
+ Vs = [V|_].
553
+ :- endif.
554
+
555
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
556
+ 'chr novel_production'( Self, Tuple) :-
557
+ arg( 5, Self, Ref), % ARGXXX
558
+ 'chr get_mutable'( History, Ref),
559
+ ( get_ds( Tuple, History, _) ->
560
+ fail
561
+ ;
562
+ true
563
+ ).
564
+
565
+ %
566
+ % Not folded with novel_production/2 because guard checking
567
+ % goes in between the two calls.
568
+ %
569
+ 'chr extend_history'( Self, Tuple) :-
570
+ arg( 5, Self, Ref), % ARGXXX
571
+ 'chr get_mutable'( History, Ref),
572
+ put_ds( Tuple, History, x, NewHistory),
573
+ 'chr update_mutable'( NewHistory, Ref).
574
+
575
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
576
+ 'chr allocate_constraint'( Closure, Self, F, Args) :-
577
+ Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], % SUSPXXX
578
+ 'chr create_mutable'(0, Gref),
579
+ 'chr empty_history'(History),
580
+ 'chr create_mutable'(History, Href),
581
+ 'chr create_mutable'(passive(Args), Mref),
582
+ 'chr gen_id'( Id).
583
+
584
+ %
585
+ % 'chr activate_constraint'( -, +, -).
586
+ %
587
+ % The transition gc->active should be rare
588
+ %
589
+ 'chr activate_constraint'( Vars, Susp, Generation) :-
590
+ arg( 2, Susp, Mref), % ARGXXX
591
+ 'chr get_mutable'( State, Mref),
592
+ 'chr update_mutable'( active, Mref),
593
+ ( nonvar(Generation) -> % aih
594
+ true
595
+ ;
596
+ arg( 4, Susp, Gref), % ARGXXX
597
+ 'chr get_mutable'( Gen, Gref),
598
+ Generation is Gen+1,
599
+ 'chr update_mutable'( Generation, Gref)
600
+ ),
601
+ ( compound(State) -> % passive/1
602
+ term_variables( State, Vs),
603
+ 'chr none_locked'( Vs),
604
+ Vars = [Global|Vs],
605
+ 'chr default_store'(Global)
606
+ ; State == removed -> % the price for eager removal ...
607
+ Susp =.. [_,_,_,_,_,_,_|Args],
608
+ term_variables( Args, Vs),
609
+ Vars = [Global|Vs],
610
+ 'chr default_store'(Global)
611
+ ;
612
+ Vars = []
613
+ ).
614
+
615
+ 'chr insert_constraint_internal'([Global|Vars], Self, Closure, F, Args) :-
616
+ 'chr default_store'(Global),
617
+ term_variables(Args,Vars),
618
+ 'chr none_locked'(Vars),
619
+ Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args], % SUSPXXX
620
+ 'chr create_mutable'(active, Mref),
621
+ 'chr create_mutable'(0, Gref),
622
+ 'chr empty_history'(History),
623
+ 'chr create_mutable'(History, Href),
624
+ 'chr gen_id'(Id).
625
+
626
+ insert_constraint_internal([Global|Vars], Self, Term, Closure, F, Args) :-
627
+ 'chr default_store'(Global),
628
+ term_variables( Term, Vars),
629
+ 'chr none_locked'( Vars),
630
+ 'chr empty_history'( History),
631
+ 'chr create_mutable'( active, Mref),
632
+ 'chr create_mutable'( 0, Gref),
633
+ 'chr create_mutable'( History, Href),
634
+ 'chr gen_id'( Id),
635
+ Self =.. [suspension,Id,Mref,Closure,Gref,Href,F|Args]. % SUSPXXX
636
+
637
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
638
+ 'chr empty_history'( E) :- empty_ds( E).
639
+
640
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
641
+ 'chr gen_id'( Id) :-
642
+ nb_getval(chr_id,Id),
643
+ NextId is Id + 1,
644
+ nb_setval(chr_id,NextId).
645
+
646
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
647
+
648
+ %% SWI begin
649
+ 'chr create_mutable'(V,mutable(V)).
650
+ 'chr get_mutable'(V,mutable(V)).
651
+ 'chr update_mutable'(V,M) :- setarg(1,M,V).
652
+ %% SWI end
653
+
654
+ %% SICStus begin
655
+ %% 'chr create_mutable'(Val, Mut) :- create_mutable(Val, Mut).
656
+ %% 'chr get_mutable'(Val, Mut) :- get_mutable(Val, Mut).
657
+ %% 'chr update_mutable'(Val, Mut) :- update_mutable(Val, Mut).
658
+ %% SICStus end
659
+
660
+
661
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
662
+ %% SWI begin
663
+ 'chr default_store'(X) :- nb_getval(chr_global,X).
664
+ %% SWI end
665
+
666
+ %% SICStus begin
667
+ %% 'chr default_store'(A) :- global_term_ref_1(A).
668
+ %% SICStus end
669
+
670
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
671
+
672
+ 'chr sbag_del_element'( [], _, []).
673
+ 'chr sbag_del_element'( [X|Xs], Elem, Set2) :-
674
+ ( X==Elem ->
675
+ Set2 = Xs
676
+ ;
677
+ Set2 = [X|Xss],
678
+ 'chr sbag_del_element'( Xs, Elem, Xss)
679
+ ).
680
+
681
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
682
+ 'chr merge_attributes'([],Ys,Ys).
683
+ 'chr merge_attributes'([X | Xs],YL,R) :-
684
+ ( YL = [Y | Ys] ->
685
+ arg(1,X,XId), % ARGXXX
686
+ arg(1,Y,YId), % ARGXXX
687
+ ( XId < YId ->
688
+ R = [X | T],
689
+ 'chr merge_attributes'(Xs,YL,T)
690
+ ; XId > YId ->
691
+ R = [Y | T],
692
+ 'chr merge_attributes'([X|Xs],Ys,T)
693
+ ;
694
+ R = [X | T],
695
+ 'chr merge_attributes'(Xs,Ys,T)
696
+ )
697
+ ;
698
+ R = [X | Xs]
699
+ ).
700
+
701
+ 'chr new_merge_attributes'([],A2,A) :-
702
+ A = A2.
703
+ 'chr new_merge_attributes'([E1|AT1],A2,A) :-
704
+ ( A2 = [E2|AT2] ->
705
+ 'chr new_merge_attributes'(E1,E2,AT1,AT2,A)
706
+ ;
707
+ A = [E1|AT1]
708
+ ).
709
+
710
+ 'chr new_merge_attributes'(Pos1-L1,Pos2-L2,AT1,AT2,A) :-
711
+ ( Pos1 < Pos2 ->
712
+ A = [Pos1-L1|AT],
713
+ 'chr new_merge_attributes'(AT1,[Pos2-L2|AT2],AT)
714
+ ; Pos1 > Pos2 ->
715
+ A = [Pos2-L2|AT],
716
+ 'chr new_merge_attributes'([Pos1-L1|AT1],AT2,AT)
717
+ ;
718
+ 'chr merge_attributes'(L1,L2,L),
719
+ A = [Pos1-L|AT],
720
+ 'chr new_merge_attributes'(AT1,AT2,AT)
721
+ ).
722
+
723
+ 'chr all_suspensions'([],_,_).
724
+ 'chr all_suspensions'([Susps|SuspsList],Pos,Attr) :-
725
+ all_suspensions(Attr,Susps,SuspsList,Pos).
726
+
727
+ all_suspensions([],[],SuspsList,Pos) :-
728
+ all_suspensions([],[],SuspsList,Pos). % all empty lists
729
+ all_suspensions([APos-ASusps|RAttr],Susps,SuspsList,Pos) :-
730
+ NPos is Pos + 1,
731
+ ( Pos == APos ->
732
+ Susps = ASusps,
733
+ 'chr all_suspensions'(SuspsList,NPos,RAttr)
734
+ ;
735
+ Susps = [],
736
+ 'chr all_suspensions'(SuspsList,NPos,[APos-ASusps|RAttr])
737
+ ).
738
+
739
+ 'chr normalize_attr'([],[]).
740
+ 'chr normalize_attr'([Pos-L|R],[Pos-NL|NR]) :-
741
+ sort(L,NL),
742
+ 'chr normalize_attr'(R,NR).
743
+
744
+ 'chr select'([E|T],F,R) :-
745
+ ( E = F ->
746
+ R = T
747
+ ;
748
+ R = [E|NR],
749
+ 'chr select'(T,F,NR)
750
+ ).
751
+
752
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
753
+
754
+ :- multifile
755
+ chr:debug_event/2, % +State, +Event
756
+ chr:debug_interact/3. % +Event, +Depth, -Command
757
+
758
+ 'chr debugging' :-
759
+ nb_getval(chr_debug,mutable(trace)).
760
+
761
+ 'chr debug_event'(Event) :-
762
+ ( nb_getval(chr_debug,mutable(State)),
763
+ State \== off
764
+ -> ( chr:debug_event(State, Event)
765
+ -> true
766
+ ; debug_event(State,Event)
767
+ )
768
+ ; true
769
+ ).
770
+
771
+ chr_trace :-
772
+ nb_setval(chr_debug,mutable(trace)).
773
+ chr_notrace :-
774
+ nb_setval(chr_debug,mutable(off)).
775
+
776
+ % chr_leash(+Spec)
777
+ %
778
+ % Define the set of ports at which we prompt for user interaction
779
+
780
+ chr_leash(Spec) :-
781
+ leashed_ports(Spec, Ports),
782
+ nb_setval(chr_leash,mutable(Ports)).
783
+
784
+ leashed_ports(none, []).
785
+ leashed_ports(off, []).
786
+ leashed_ports(all, [call, exit, redo, fail, wake, try, apply, insert, remove]).
787
+ leashed_ports(default, [call,exit,fail,wake,apply]).
788
+ leashed_ports(One, Ports) :-
789
+ atom(One), One \== [], !,
790
+ leashed_ports([One], Ports).
791
+ leashed_ports(Set, Ports) :-
792
+ sort(Set, Ports), % make unique
793
+ leashed_ports(all, All),
794
+ valid_ports(Ports, All).
795
+
796
+ valid_ports([], _).
797
+ valid_ports([H|T], Valid) :-
798
+ ( memberchk(H, Valid)
799
+ -> true
800
+ ; throw(error(domain_error(chr_port, H), _))
801
+ ),
802
+ valid_ports(T, Valid).
803
+
804
+ user:exception(undefined_global_variable, Name, retry) :-
805
+ chr_runtime_debug_global_variable(Name),
806
+ chr_debug_init.
807
+
808
+ chr_runtime_debug_global_variable(chr_leash).
809
+
810
+ chr_debug_init :-
811
+ leashed_ports(default, Ports),
812
+ nb_setval(chr_leash, mutable(Ports)).
813
+
814
+ :- initialization chr_debug_init.
815
+
816
+ % debug_event(+State, +Event)
817
+
818
+
819
+ %debug_event(trace, Event) :-
820
+ % functor(Event, Name, Arity),
821
+ % writeln(Name/Arity), fail.
822
+ debug_event(trace,Event) :-
823
+ Event = call(_), !,
824
+ get_debug_history(History,Depth),
825
+ NDepth is Depth + 1,
826
+ chr_debug_interact(Event,NDepth),
827
+ set_debug_history([Event|History],NDepth).
828
+ debug_event(trace,Event) :-
829
+ Event = wake(_), !,
830
+ get_debug_history(History,Depth),
831
+ NDepth is Depth + 1,
832
+ chr_debug_interact(Event,NDepth),
833
+ set_debug_history([Event|History],NDepth).
834
+ debug_event(trace,Event) :-
835
+ Event = redo(_), !,
836
+ get_debug_history(_History, Depth),
837
+ chr_debug_interact(Event, Depth).
838
+ debug_event(trace,Event) :-
839
+ Event = exit(_),!,
840
+ get_debug_history([_|History],Depth),
841
+ chr_debug_interact(Event,Depth),
842
+ NDepth is Depth - 1,
843
+ set_debug_history(History,NDepth).
844
+ debug_event(trace,Event) :-
845
+ Event = fail(_),!,
846
+ get_debug_history(_,Depth),
847
+ chr_debug_interact(Event,Depth).
848
+ debug_event(trace, Event) :-
849
+ Event = remove(_), !,
850
+ get_debug_history(_,Depth),
851
+ chr_debug_interact(Event, Depth).
852
+ debug_event(trace, Event) :-
853
+ Event = insert(_), !,
854
+ get_debug_history(_,Depth),
855
+ chr_debug_interact(Event, Depth).
856
+ debug_event(trace, Event) :-
857
+ Event = try(_,_,_,_), !,
858
+ get_debug_history(_,Depth),
859
+ chr_debug_interact(Event, Depth).
860
+ debug_event(trace, Event) :-
861
+ Event = apply(_,_,_,_), !,
862
+ get_debug_history(_,Depth),
863
+ chr_debug_interact(Event,Depth).
864
+
865
+ debug_event(skip(_,_),Event) :-
866
+ Event = call(_), !,
867
+ get_debug_history(History,Depth),
868
+ NDepth is Depth + 1,
869
+ set_debug_history([Event|History],NDepth).
870
+ debug_event(skip(_,_),Event) :-
871
+ Event = wake(_), !,
872
+ get_debug_history(History,Depth),
873
+ NDepth is Depth + 1,
874
+ set_debug_history([Event|History],NDepth).
875
+ debug_event(skip(SkipSusp,SkipDepth),Event) :-
876
+ Event = exit(Susp),!,
877
+ get_debug_history([_|History],Depth),
878
+ ( SkipDepth == Depth,
879
+ SkipSusp == Susp ->
880
+ set_chr_debug(trace),
881
+ chr_debug_interact(Event,Depth)
882
+ ;
883
+ true
884
+ ),
885
+ NDepth is Depth - 1,
886
+ set_debug_history(History,NDepth).
887
+ debug_event(skip(_,_),_) :- !,
888
+ true.
889
+
890
+ % chr_debug_interact(+Event, +Depth)
891
+ %
892
+ % Interact with the user on Event that took place at Depth. First
893
+ % calls chr:debug_interact(+Event, +Depth, -Command) hook. If this
894
+ % fails the event is printed and the system prompts for a command.
895
+
896
+ chr_debug_interact(Event, Depth) :-
897
+ chr:debug_interact(Event, Depth, Command), !,
898
+ handle_debug_command(Command,Event,Depth).
899
+ chr_debug_interact(Event, Depth) :-
900
+ print_event(Event, Depth),
901
+ ( leashed(Event)
902
+ -> ask_continue(Command)
903
+ ; Command = creep
904
+ ),
905
+ handle_debug_command(Command,Event,Depth).
906
+
907
+ leashed(Event) :-
908
+ functor(Event, Port, _),
909
+ nb_getval(chr_leash, mutable(Ports)),
910
+ memberchk(Port, Ports).
911
+
912
+ :- multifile
913
+ chr:debug_ask_continue/1.
914
+
915
+ ask_continue(Command) :-
916
+ chr:debug_ask_continue(Command), !.
917
+ ask_continue(Command) :-
918
+ print_message(trace, chr(prompt)),
919
+ get_single_char(CharCode),
920
+ ( CharCode == -1
921
+ -> Char = end_of_file
922
+ ; char_code(Char, CharCode)
923
+ ),
924
+ ( debug_command(Char, Command)
925
+ -> print_message(trace, chr(command(Command)))
926
+ ; print_message(help, chr(invalid_command)),
927
+ ask_continue(Command)
928
+ ).
929
+
930
+
931
+ 'chr debug command'(Char, Command) :-
932
+ debug_command(Char, Command).
933
+
934
+ debug_command(c, creep).
935
+ debug_command(' ', creep).
936
+ debug_command('\r', creep).
937
+ debug_command(s, skip).
938
+ debug_command(g, ancestors).
939
+ debug_command(n, nodebug).
940
+ debug_command(a, abort).
941
+ debug_command(f, fail).
942
+ debug_command(b, break).
943
+ debug_command(?, help).
944
+ debug_command(h, help).
945
+ debug_command(end_of_file, exit).
946
+
947
+
948
+ handle_debug_command(creep,_,_) :- !.
949
+ handle_debug_command(skip, Event, Depth) :- !,
950
+ Event =.. [Type|Rest],
951
+ ( Type \== call,
952
+ Type \== wake ->
953
+ handle_debug_command(creep,Event,Depth)
954
+ ;
955
+ Rest = [Susp],
956
+ set_chr_debug(skip(Susp,Depth))
957
+ ).
958
+ handle_debug_command(ancestors,Event,Depth) :- !,
959
+ print_chr_debug_history,
960
+ chr_debug_interact(Event,Depth).
961
+ handle_debug_command(nodebug,_,_) :- !,
962
+ chr_notrace.
963
+ handle_debug_command(abort,_,_) :- !,
964
+ abort.
965
+ handle_debug_command(exit,_,_) :- !,
966
+ ( thread_self(main) % Only allow terminating from the
967
+ -> halt % main thread
968
+ ; permission_error(access, chr_debug, halt)
969
+ ).
970
+ handle_debug_command(fail,_,_) :- !,
971
+ fail.
972
+ handle_debug_command(break,Event,Depth) :- !,
973
+ break,
974
+ chr_debug_interact(Event,Depth).
975
+ handle_debug_command(help,Event,Depth) :- !,
976
+ print_message(help, chr(debug_options)),
977
+ chr_debug_interact(Event,Depth).
978
+ handle_debug_command(Cmd, _, _) :-
979
+ throw(error(domain_error(chr_debug_command, Cmd), _)).
980
+
981
+ print_chr_debug_history :-
982
+ get_debug_history(History,Depth),
983
+ print_message(trace, chr(ancestors(History, Depth))).
984
+
985
+ print_event(Event, Depth) :-
986
+ print_message(trace, chr(event(Event, Depth))).
987
+
988
+ % {set,get}_debug_history(Ancestors, Depth)
989
+ %
990
+ % Set/get the list of ancestors and the depth of the current goal.
991
+
992
+ get_debug_history(History,Depth) :-
993
+ nb_getval(chr_debug_history,mutable(History,Depth)).
994
+
995
+ set_debug_history(History,Depth) :-
996
+ nb_getval(chr_debug_history,Mutable),
997
+ setarg(1,Mutable,History),
998
+ setarg(2,Mutable,Depth).
999
+
1000
+ set_chr_debug(State) :-
1001
+ nb_getval(chr_debug,Mutable),
1002
+ setarg(1,Mutable,State).
1003
+
1004
+ 'chr chr_indexed_variables'(Susp,Vars) :-
1005
+ Susp =.. [_,_,_,_,_,_,_|Args],
1006
+ term_variables(Args,Vars).
1007
+
1008
+
1009
+ /*******************************
1010
+ * SANDBOX *
1011
+ *******************************/
1012
+ :- multifile
1013
+ sandbox:safe_primitive/1.
1014
+
1015
+ sandbox:safe_primitive(chr_runtime:handle_debug_command(_,_,_)).
1016
+ sandbox:safe_primitive(chr_runtime:ask_continue(_)).