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,365 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2020, VU University Amsterdam
7
+ CWI, Amsterdam
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
+ :- module(hashtable,
37
+ [ ht_new/1, % --HT
38
+ ht_is_hashtable/1, % @HT
39
+ ht_size/2, % +HT, -Size
40
+
41
+ ht_put/3, % !HT, +Key, +Value
42
+ ht_update/4, % +HT, +Key, ?Old, +New
43
+ ht_put_new/3, % !HT, +Key, +Value
44
+ ht_put/5, % !HT, +Key, +Value, +IfNew, -Old
45
+ ht_del/3, % !HT, +Key, -Value
46
+
47
+ ht_get/3, % +HT, +Key, -Value
48
+ ht_gen/3, % +HT, ?Key, ?Value
49
+ ht_pairs/2, % ?HT, ?Pairs
50
+ ht_keys/2 % +HT, -Keys
51
+ ]).
52
+ :- autoload(library(error), [must_be/2]).
53
+
54
+ /** <module> Hash tables
55
+
56
+ Hash tables are one of the many key-value representations available to
57
+ SWI-Prolog.
58
+
59
+ This module implements a hash table as a _mutable_ and _backtrackable_
60
+ data structure. The hash table is implemented as a _closed hash table_,
61
+ where the _buckets_ array is implemented using an unbounded arity
62
+ compound term. Elements in this array are manipulated using setarg/3.
63
+
64
+ Hash tables allow for any Prolog data types as keys or values, except
65
+ that the key cannot be a variable. Applications that require a plain
66
+ variable as key can do so by wrapping all keys in a compound, e.g.,
67
+ k(Var).
68
+ */
69
+
70
+ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
71
+ Data structure
72
+
73
+ ht(Load, Size, Table)
74
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
75
+
76
+ %! ht_new(--HT)
77
+ %
78
+ % Create a new hash table.
79
+
80
+ ht_new(ht(0,0,[](_))).
81
+
82
+ %! ht_is_hashtable(@HT) is semidet.
83
+ %
84
+ % True when HT is a hash table.
85
+
86
+ ht_is_hashtable(HT) :-
87
+ nonvar(HT),
88
+ HT = ht(Load, Size, Buckets),
89
+ integer(Load),
90
+ integer(Size),
91
+ compound_name_arity(Buckets, [], Arity),
92
+ Arity =:= Size*2+1.
93
+
94
+ %! ht_size(+HT, -Count) is det.
95
+ %
96
+ % True when Size is the number of key-value pairs in HT.
97
+
98
+ ht_size(ht(Count, _Size, _Buckets), Count).
99
+
100
+ %! ht_put(!HT, +Key, +Value) is det.
101
+ %
102
+ % Add a Key-Value to HT. The binding is undone on backtracking.
103
+
104
+ ht_put(HT, Key, Value) :-
105
+ must_be(nonvar, Key),
106
+ ht_put(HT, Key, Value, _, _, _).
107
+
108
+ %! ht_put_new(!HT, +Key, +Value) is semidet.
109
+ %
110
+ % As ht_put/3, but fails if Key is already in HT instead of updating
111
+ % the associated value.
112
+
113
+ ht_put_new(HT, Key, Value) :-
114
+ must_be(nonvar, Key),
115
+ ht_put(HT, Key, Value, _, _, true).
116
+
117
+ %! ht_update(+HT, +Key, ?Old, +New) is semidet.
118
+ %
119
+ % True when HT holds Key-Old before and Key-New after this call. Note
120
+ % that it is possible to update to a variable and the instantiate
121
+ % this. For example, a word-count update could be implemented as:
122
+ %
123
+ % ```
124
+ % update_word_count(HT, Word) :-
125
+ % ( ht_update(HT, Word, Old, New)
126
+ % -> New is Old+1
127
+ % ; ht_put(HT, Word, 1)
128
+ % ).
129
+ % ```
130
+
131
+ ht_update(HT, Key, Old, New) :-
132
+ must_be(nonvar, Key),
133
+ ht_put(HT, Key, New, _, Old, false).
134
+
135
+ %! ht_put(!HT, +Key, +Value, +IfNew, -Old) is det.
136
+ %
137
+ % Add Key-Value to HT. Old is unified with the old value associated
138
+ % with Key or, if Key is new, with IfNew. This can be used to
139
+ % bootstrap managing a list of values, e.g.
140
+ %
141
+ % ht_put_list(HT, Key, Value) :-
142
+ % ht_put(HT, Key, [Value|Tail], [], Tail).
143
+
144
+ ht_put(HT, Key, Value, IfNew, Old) :-
145
+ must_be(nonvar, Key),
146
+ ht_put(HT, Key, Value, IfNew, Old, _).
147
+
148
+ ht_put(HT, Key, Value, IfNew, Old, IsNew) :-
149
+ HT = ht(Load, Size, Buckets),
150
+ ( Load >= Size//2
151
+ -> ht_resize(HT),
152
+ ht_put(HT, Key, Value, IfNew, Old, IsNew)
153
+ ; variant_hash(Key, I0),
154
+ I is I0 mod Size,
155
+ put_(Buckets, I, Size, Key, Old, IfNew, Value, IsNew),
156
+ ( IsNew == true
157
+ -> Load2 is Load+1,
158
+ setarg(1, HT, Load2)
159
+ ; true
160
+ )
161
+ ).
162
+
163
+ put_(Buckets, I, Size, Key, Old, IfNew, Value, IsNew) :-
164
+ ht_kv(Buckets, I, K, V),
165
+ ( var(K)
166
+ -> IsNew = true,
167
+ Old = IfNew,
168
+ K = Key,
169
+ V = Value
170
+ ; K == Key
171
+ -> IsNew = false,
172
+ Old = V,
173
+ ht_put_v(Buckets, I, Value)
174
+ ; I2 is (I+1) mod Size,
175
+ put_(Buckets, I2, Size, Key, Old, IfNew, Value, IsNew)
176
+ ).
177
+
178
+ ht_resize(HT) :-
179
+ HT = ht(_Load, Size, Buckets),
180
+ NewSize is max(4, Size*2),
181
+ NewArity is NewSize*2+1,
182
+ compound_name_arity(NewBuckets, [], NewArity),
183
+ copy_members(0, Size, Buckets, NewSize, NewBuckets),
184
+ setarg(2, HT, NewSize),
185
+ setarg(3, HT, NewBuckets).
186
+
187
+ copy_members(I, OSize, OBuckets, NSize, NBuckets) :-
188
+ I < OSize,
189
+ !,
190
+ ht_kv(OBuckets, I, K, V),
191
+ ( nonvar(K)
192
+ -> variant_hash(K, I0),
193
+ NI is I0 mod NSize,
194
+ copy_(NBuckets, NI, NSize, K, V)
195
+ ; true
196
+ ),
197
+ I2 is I+1,
198
+ copy_members(I2, OSize, OBuckets, NSize, NBuckets).
199
+ copy_members(_, _, _, _, _).
200
+
201
+ copy_(Buckets, I, Size, Key, Value) :-
202
+ ht_kv(Buckets, I, K, V),
203
+ ( var(K)
204
+ -> K = Key,
205
+ V = Value
206
+ ; I2 is (I+1) mod Size,
207
+ copy_(Buckets, I2, Size, Key, Value)
208
+ ).
209
+
210
+
211
+ %! ht_del(!HT, +Key, -Value) is semidet.
212
+ %
213
+ % Delete Key-Value from HT. Fails if Key does not appear in HT or
214
+ % Value does not unify with the old associated value.
215
+
216
+ ht_del(HT, Key, Value) :-
217
+ must_be(nonvar, Key),
218
+ HT = ht(Load, Size, Buckets),
219
+ Load > 0,
220
+ variant_hash(Key, I0),
221
+ I is I0 mod Size,
222
+ del_(Buckets, I, Size, Key, Value),
223
+ Load2 is Load - 1,
224
+ setarg(1, HT, Load2).
225
+
226
+ del_(Buckets, I, Size, Key, Value) :-
227
+ ht_kv(Buckets, I, K, V),
228
+ ( var(K)
229
+ -> fail
230
+ ; K == Key
231
+ -> V = Value,
232
+ ht_put_kv(Buckets, I, _, _),
233
+ del_shift(Buckets, I, I, Size)
234
+ ; I2 is (I+1) mod Size,
235
+ del_(Buckets, I2, Size, Key, Value)
236
+ ).
237
+
238
+ del_shift(Buckets, I0, J, Size) :-
239
+ I is (I0+1) mod Size,
240
+ ht_kv(Buckets, I, K, V),
241
+ ( var(K)
242
+ -> true
243
+ ; variant_hash(K, Hash),
244
+ R is Hash mod Size,
245
+ ( ( I >= R, R > J
246
+ ; R > J, J > I
247
+ ; J > I, I >= R
248
+ )
249
+ -> del_shift(Buckets, I, J, Size)
250
+ ; ht_put_kv(Buckets, J, K, V),
251
+ ht_put_kv(Buckets, I, _, _),
252
+ del_shift(Buckets, I, I, Size)
253
+ )
254
+ ).
255
+
256
+
257
+ %! ht_get(+HT, +Key, -Value) is semidet.
258
+ %
259
+ % True when Key is in HT and associated with Value.
260
+
261
+ ht_get(ht(Load, Size, Buckets), Key, Value) :-
262
+ Load > 0,
263
+ must_be(nonvar, Key),
264
+ variant_hash(Key, I0),
265
+ I is I0 mod Size,
266
+ get_(Buckets, I, Size, Key, Value).
267
+
268
+ get_(Buckets, I, Size, Key, Value) :-
269
+ ht_kv(Buckets, I, K, V),
270
+ ( Key == K
271
+ -> Value = V
272
+ ; nonvar(K)
273
+ -> I2 is (I+1) mod Size,
274
+ get_(Buckets, I2, Size, Key, Value)
275
+ ).
276
+
277
+ ht_k(Buckets, I, K) :-
278
+ IK is I*2+1,
279
+ arg(IK, Buckets, K).
280
+
281
+ ht_kv(Buckets, I, K, V) :-
282
+ IK is I*2+1,
283
+ IV is IK+1,
284
+ arg(IK, Buckets, K),
285
+ arg(IV, Buckets, V).
286
+
287
+ ht_put_kv(Buckets, I, K, V) :-
288
+ IK is I*2+1,
289
+ IV is IK+1,
290
+ setarg(IK, Buckets, K),
291
+ setarg(IV, Buckets, V).
292
+
293
+ ht_put_v(Buckets, I, V) :-
294
+ IV is I*2+2,
295
+ setarg(IV, Buckets, V).
296
+
297
+ %! ht_gen(+HT, ?Key, ?Value) is nondet.
298
+ %
299
+ % True when Key-Value is in HT. Pairs are enumerated on backtracking
300
+ % using the hash table order.
301
+
302
+ ht_gen(HT, Key, Value) :-
303
+ HT = ht(_, Size, Buckets),
304
+ End is Size - 1,
305
+ between(0, End, I),
306
+ ht_kv(Buckets, I, K, V),
307
+ nonvar(K),
308
+ K = Key,
309
+ V = Value.
310
+
311
+ %! ht_pairs(?HT, ?Pairs) is det.
312
+ %
313
+ % True when Pairs and HT represent the same association. When used in
314
+ % mode (+,-), Pairs is an ordered set.
315
+
316
+ ht_pairs(HT, Pairs) :-
317
+ ht_is_hashtable(HT),
318
+ !,
319
+ HT = ht(_Load, Size, Buckets),
320
+ pairs_(0, Size, Buckets, Pairs0),
321
+ sort(Pairs0, Pairs).
322
+ ht_pairs(HT, Pairs) :-
323
+ must_be(list(pair), Pairs),
324
+ ht_new(HT),
325
+ ht_fill(Pairs, HT).
326
+
327
+ pairs_(I, Size, Buckets, Pairs) :-
328
+ ( I < Size
329
+ -> ht_kv(Buckets, I, K, V),
330
+ ( nonvar(K)
331
+ -> Pairs = [K-V|T],
332
+ I2 is I+1,
333
+ pairs_(I2, Size, Buckets, T)
334
+ ; I2 is I+1,
335
+ pairs_(I2, Size, Buckets, Pairs)
336
+ )
337
+ ; Pairs = []
338
+ ).
339
+
340
+ ht_fill([], _).
341
+ ht_fill([K-V|T], HT) :-
342
+ ht_put(HT, K, V),
343
+ ht_fill(T, HT).
344
+
345
+ %! ht_keys(+HT, -Keys) is det.
346
+ %
347
+ % True when Keys is an ordered set of all keys in HT.
348
+
349
+ ht_keys(HT, Keys) :-
350
+ HT = ht(_Load, Size, Buckets),
351
+ keys_(0, Size, Buckets, Keys0),
352
+ sort(Keys0, Keys).
353
+
354
+ keys_(I, Size, Buckets, Keys) :-
355
+ ( I < Size
356
+ -> ht_k(Buckets, I, K),
357
+ ( nonvar(K)
358
+ -> Keys = [K|T],
359
+ I2 is I+1,
360
+ keys_(I2, Size, Buckets, T)
361
+ ; I2 is I+1,
362
+ keys_(I2, Size, Buckets, Keys)
363
+ )
364
+ ; Keys = []
365
+ ).
@@ -0,0 +1,252 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Lars Buitinck
4
+ E-mail: larsmans@gmail.com
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2006-2015, Lars Buitinck
7
+ All rights reserved.
8
+
9
+ Redistribution and use in source and binary forms, with or without
10
+ modification, are permitted provided that the following conditions
11
+ are met:
12
+
13
+ 1. Redistributions of source code must retain the above copyright
14
+ notice, this list of conditions and the following disclaimer.
15
+
16
+ 2. Redistributions in binary form must reproduce the above copyright
17
+ notice, this list of conditions and the following disclaimer in
18
+ the documentation and/or other materials provided with the
19
+ distribution.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+ POSSIBILITY OF SUCH DAMAGE.
33
+ */
34
+
35
+ :- module(heaps,
36
+ [ add_to_heap/4, % +Heap0, +Key, ?Value, -Heap
37
+ delete_from_heap/4, % +Heap0, -Key, +Value, -Heap
38
+ empty_heap/1, % +Heap
39
+ get_from_heap/4, % ?Heap0, ?Key, ?Value, -Heap
40
+ heap_size/2, % +Heap, -Size:int
41
+ heap_to_list/2, % +Heap, -List:list
42
+ is_heap/1, % +Term
43
+ list_to_heap/2, % +List:list, -Heap
44
+ merge_heaps/3, % +Heap0, +Heap1, -Heap
45
+ min_of_heap/3, % +Heap, ?Key, ?Value
46
+ min_of_heap/5, % +Heap, ?Key1, ?Value1,
47
+ % ?Key2, ?Value2
48
+ singleton_heap/3 % ?Heap, ?Key, ?Value
49
+ ]).
50
+
51
+ /** <module> heaps/priority queues
52
+ *
53
+ * Heaps are data structures that return the entries inserted into them in an
54
+ * ordered fashion, based on a priority. This makes them the data structure of
55
+ * choice for implementing priority queues, a central element of algorithms such
56
+ * as best-first or A* search and Kruskal's minimum-spanning-tree algorithm.
57
+ *
58
+ * This module implements min-heaps, meaning that key-value items are retrieved in
59
+ * ascending order of key. In other words, the key determines the priority. It
60
+ * was designed to be compatible with the SICStus Prolog library module of the
61
+ * same name. merge_heaps/3 and singleton_heap/3 are SWI-specific extension. The
62
+ * portray_heap/1 predicate is not implemented.
63
+ *
64
+ * Although the values can be arbitrary Prolog terms, the keys determine the
65
+ * priority, so keys must be ordered by @=</2. This means that variables can be
66
+ * used as keys, but binding them in between heap operations may change the
67
+ * ordering. It also means that rational terms (cyclic trees), for which standard
68
+ * order is not well-defined, cannot be used as keys.
69
+ *
70
+ * The current version implements pairing heaps. These support insertion and
71
+ * merging both in constant time, deletion of the minimum in logarithmic amortized
72
+ * time (though delete-min, i.e., get_from_heap/3, takes linear time in the worst
73
+ * case).
74
+ *
75
+ * @author Lars Buitinck
76
+ */
77
+
78
+ /*
79
+ * Heaps are represented as heap(H,Size) terms, where H is a pairing heap and
80
+ * Size is an integer. A pairing heap is either nil or a term
81
+ * t(X,PrioX,Sub) where Sub is a list of pairing heaps t(Y,PrioY,Sub) s.t.
82
+ * PrioX @< PrioY. See predicate is_heap/2, below.
83
+ */
84
+
85
+ %! add_to_heap(+Heap0, +Key, ?Value, -Heap) is semidet.
86
+ %
87
+ % Adds Value with priority Key to Heap0, constructing a new
88
+ % heap in Heap.
89
+
90
+ add_to_heap(heap(Q0,M),P,X,heap(Q1,N)) :-
91
+ meld(Q0,t(X,P,[]),Q1),
92
+ N is M+1.
93
+
94
+ %! delete_from_heap(+Heap0, -Key, +Value, -Heap) is semidet.
95
+ %
96
+ % Deletes Value from Heap0, leaving its priority in Key and the
97
+ % resulting data structure in Heap. Fails if Value is not found in
98
+ % Heap0.
99
+ %
100
+ % @bug This predicate is extremely inefficient and exists only for
101
+ % SICStus compatibility.
102
+
103
+ delete_from_heap(Q0,P,X,Q) :-
104
+ get_from_heap(Q0,P,X,Q),
105
+ !.
106
+ delete_from_heap(Q0,Px,X,Q) :-
107
+ get_from_heap(Q0,Py,Y,Q1),
108
+ delete_from_heap(Q1,Px,X,Q2),
109
+ add_to_heap(Q2,Py,Y,Q).
110
+
111
+ %! empty_heap(?Heap) is semidet.
112
+ %
113
+ % True if Heap is an empty heap. Complexity: constant.
114
+
115
+ empty_heap(heap(nil,0)).
116
+
117
+ %! singleton_heap(?Heap, ?Key, ?Value) is semidet.
118
+ %
119
+ % True if Heap is a heap with the single element Key-Value.
120
+ %
121
+ % Complexity: constant.
122
+
123
+ singleton_heap(heap(t(X,P,[]), 1), P, X).
124
+
125
+ %! get_from_heap(?Heap0, ?Key, ?Value, -Heap) is semidet.
126
+ %
127
+ % Retrieves the minimum-priority pair Key-Value from Heap0.
128
+ % Heap is Heap0 with that pair removed. Complexity: logarithmic
129
+ % (amortized), linear in the worst case.
130
+
131
+ get_from_heap(heap(t(X,P,Sub),M), P, X, heap(Q,N)) :-
132
+ pairing(Sub,Q),
133
+ N is M-1.
134
+
135
+ %! heap_size(+Heap, -Size:int) is det.
136
+ %
137
+ % Determines the number of elements in Heap. Complexity: constant.
138
+
139
+ heap_size(heap(_,N),N).
140
+
141
+ %! heap_to_list(+Heap, -List:list) is det.
142
+ %
143
+ % Constructs a list List of Key-Value terms, ordered by
144
+ % (ascending) priority. Complexity: O(N log N).
145
+
146
+ heap_to_list(Q,L) :-
147
+ to_list(Q,L).
148
+ to_list(heap(nil,0),[]) :- !.
149
+ to_list(Q0,[P-X|Xs]) :-
150
+ get_from_heap(Q0,P,X,Q),
151
+ heap_to_list(Q,Xs).
152
+
153
+ %! is_heap(+X) is semidet.
154
+ %
155
+ % Returns true if X is a heap. Validates the consistency of the
156
+ % entire heap. Complexity: linear.
157
+
158
+ is_heap(V) :-
159
+ var(V), !, fail.
160
+ is_heap(heap(Q,N)) :-
161
+ integer(N),
162
+ nonvar(Q),
163
+ ( Q == nil
164
+ -> N == 0
165
+ ; N > 0,
166
+ Q = t(_,MinP,Sub),
167
+ are_pairing_heaps(Sub, MinP)
168
+ ).
169
+
170
+ % True iff 1st arg is a pairing heap with min key @=< 2nd arg,
171
+ % where min key of nil is logically @> any term.
172
+ is_pairing_heap(V, _) :-
173
+ var(V),
174
+ !,
175
+ fail.
176
+ is_pairing_heap(nil, _).
177
+ is_pairing_heap(t(_,P,Sub), MinP) :-
178
+ MinP @=< P,
179
+ are_pairing_heaps(Sub, P).
180
+
181
+ % True iff 1st arg is a list of pairing heaps, each with min key @=< 2nd arg.
182
+ are_pairing_heaps(V, _) :-
183
+ var(V),
184
+ !,
185
+ fail.
186
+ are_pairing_heaps([], _).
187
+ are_pairing_heaps([Q|Qs], MinP) :-
188
+ is_pairing_heap(Q, MinP),
189
+ are_pairing_heaps(Qs, MinP).
190
+
191
+ %! list_to_heap(+List:list, -Heap) is det.
192
+ %
193
+ % If List is a list of Key-Value terms, constructs a heap
194
+ % out of List. Complexity: linear.
195
+
196
+ list_to_heap(Xs,Q) :-
197
+ empty_heap(Empty),
198
+ list_to_heap(Xs,Empty,Q).
199
+
200
+ list_to_heap([],Q,Q).
201
+ list_to_heap([P-X|Xs],Q0,Q) :-
202
+ add_to_heap(Q0,P,X,Q1),
203
+ list_to_heap(Xs,Q1,Q).
204
+
205
+ %! min_of_heap(+Heap, ?Key, ?Value) is semidet.
206
+ %
207
+ % Unifies Value with the minimum-priority element of Heap and
208
+ % Key with its priority value. Complexity: constant.
209
+
210
+ min_of_heap(heap(t(X,P,_),_), P, X).
211
+
212
+ %! min_of_heap(+Heap, ?Key1, ?Value1, ?Key2, ?Value2) is semidet.
213
+ %
214
+ % Gets the two minimum-priority elements from Heap. Complexity: logarithmic
215
+ % (amortized).
216
+ %
217
+ % @bug This predicate is extremely inefficient and exists for compatibility
218
+ % with earlier implementations of this library and SICStus
219
+ % compatibility. It performs a linear amount of work in the worst case
220
+ % that a following get_from_heap has to re-do.
221
+
222
+ min_of_heap(Q,Px,X,Py,Y) :-
223
+ get_from_heap(Q,Px,X,Q0),
224
+ min_of_heap(Q0,Py,Y).
225
+
226
+ %! merge_heaps(+Heap0, +Heap1, -Heap) is det.
227
+ %
228
+ % Merge the two heaps Heap0 and Heap1 in Heap. Complexity: constant.
229
+
230
+ merge_heaps(heap(L,K),heap(R,M),heap(Q,N)) :-
231
+ meld(L,R,Q),
232
+ N is K+M.
233
+
234
+
235
+ % Merge two pairing heaps according to the pairing heap definition.
236
+ meld(nil,Q,Q) :- !.
237
+ meld(Q,nil,Q) :- !.
238
+ meld(L,R,Q) :-
239
+ L = t(X,Px,SubL),
240
+ R = t(Y,Py,SubR),
241
+ ( Px @< Py
242
+ -> Q = t(X,Px,[R|SubL])
243
+ ; Q = t(Y,Py,[L|SubR])
244
+ ).
245
+
246
+ % "Pair up" (recursively meld) a list of pairing heaps.
247
+ pairing([], nil).
248
+ pairing([Q], Q) :- !.
249
+ pairing([Q0,Q1|Qs], Q) :-
250
+ meld(Q0, Q1, Q2),
251
+ pairing(Qs, Q3),
252
+ meld(Q2, Q3, Q).