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,522 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: R.A.O'Keefe, L.Damas, V.S.Costa, Glenn Burgess,
4
+ Jiri Spitz and Jan Wielemaker
5
+ E-mail: J.Wielemaker@vu.nl
6
+ WWW: http://www.swi-prolog.org
7
+ Copyright (c) 2004-2018, various people and institutions
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(assoc,
37
+ [ empty_assoc/1, % -Assoc
38
+ is_assoc/1, % +Assoc
39
+ assoc_to_list/2, % +Assoc, -Pairs
40
+ assoc_to_keys/2, % +Assoc, -List
41
+ assoc_to_values/2, % +Assoc, -List
42
+ gen_assoc/3, % ?Key, +Assoc, ?Value
43
+ get_assoc/3, % +Key, +Assoc, ?Value
44
+ get_assoc/5, % +Key, +Assoc0, ?Val0, ?Assoc, ?Val
45
+ list_to_assoc/2, % +List, ?Assoc
46
+ map_assoc/2, % :Goal, +Assoc
47
+ map_assoc/3, % :Goal, +Assoc0, ?Assoc
48
+ max_assoc/3, % +Assoc, ?Key, ?Value
49
+ min_assoc/3, % +Assoc, ?Key, ?Value
50
+ ord_list_to_assoc/2, % +List, ?Assoc
51
+ put_assoc/4, % +Key, +Assoc0, +Value, ?Assoc
52
+ del_assoc/4, % +Key, +Assoc0, ?Value, ?Assoc
53
+ del_min_assoc/4, % +Assoc0, ?Key, ?Value, ?Assoc
54
+ del_max_assoc/4 % +Assoc0, ?Key, ?Value, ?Assoc
55
+ ]).
56
+ :- autoload(library(error),[domain_error/2]).
57
+
58
+
59
+ /** <module> Binary associations
60
+
61
+ Assocs are Key-Value associations implemented as a balanced binary tree
62
+ (AVL tree).
63
+
64
+ __Warning: instantiation of keys__
65
+
66
+ AVL trees depend on the Prolog _standard order of terms_ to
67
+ organize the keys as a (balanced) binary tree. This implies that any
68
+ term may be used as a key. The tree may produce wrong results, such as
69
+ not being able to find a key, if the ordering of keys changes after the
70
+ key has been inserted into the tree. The user is responsible to ensure
71
+ that variables used as keys or appearing in a term used as key that may
72
+ affect ordering are not unified, with the exception of unification
73
+ against new fresh variables. For this reason, _ground_ terms are safe
74
+ keys. When using non-ground terms, either make sure the variables appear
75
+ in places that do not affect the standard order relative to other keys
76
+ in the tree or make sure to not unify against these variables as long as
77
+ the tree is being used.
78
+
79
+ @see library(pairs), library(rbtrees)
80
+ @author R.A.O'Keefe, L.Damas, V.S.Costa and Jan Wielemaker
81
+ */
82
+
83
+ :- meta_predicate
84
+ map_assoc(1, ?),
85
+ map_assoc(2, ?, ?).
86
+
87
+ %! empty_assoc(?Assoc) is semidet.
88
+ %
89
+ % Is true if Assoc is the empty association list.
90
+
91
+ empty_assoc(t).
92
+
93
+ %! assoc_to_list(+Assoc, -Pairs) is det.
94
+ %
95
+ % Translate Assoc to a list Pairs of Key-Value pairs. The keys in
96
+ % Pairs are sorted in ascending order.
97
+
98
+ assoc_to_list(Assoc, List) :-
99
+ assoc_to_list(Assoc, List, []).
100
+
101
+ assoc_to_list(t(Key,Val,_,L,R), List, Rest) :-
102
+ assoc_to_list(L, List, [Key-Val|More]),
103
+ assoc_to_list(R, More, Rest).
104
+ assoc_to_list(t, List, List).
105
+
106
+
107
+ %! assoc_to_keys(+Assoc, -Keys) is det.
108
+ %
109
+ % True if Keys is the list of keys in Assoc. The keys are sorted in
110
+ % ascending order.
111
+
112
+ assoc_to_keys(Assoc, List) :-
113
+ assoc_to_keys(Assoc, List, []).
114
+
115
+ assoc_to_keys(t(Key,_,_,L,R), List, Rest) :-
116
+ assoc_to_keys(L, List, [Key|More]),
117
+ assoc_to_keys(R, More, Rest).
118
+ assoc_to_keys(t, List, List).
119
+
120
+
121
+ %! assoc_to_values(+Assoc, -Values) is det.
122
+ %
123
+ % True if Values is the list of values in Assoc. Values are ordered in
124
+ % ascending order of the key to which they were associated. Values may
125
+ % contain duplicates.
126
+
127
+ assoc_to_values(Assoc, List) :-
128
+ assoc_to_values(Assoc, List, []).
129
+
130
+ assoc_to_values(t(_,Value,_,L,R), List, Rest) :-
131
+ assoc_to_values(L, List, [Value|More]),
132
+ assoc_to_values(R, More, Rest).
133
+ assoc_to_values(t, List, List).
134
+
135
+ %! is_assoc(+Assoc) is semidet.
136
+ %
137
+ % True if Assoc is an association list. This predicate checks that the
138
+ % structure is valid, elements are in order, and tree is balanced to
139
+ % the extent guaranteed by AVL trees. I.e., branches of each subtree
140
+ % differ in depth by at most 1. Does _not_ validate that keys are
141
+ % sufficiently instantiated to ensure the tree remains valid if a key
142
+ % is further instantiated.
143
+
144
+ is_assoc(Assoc) :-
145
+ nonvar(Assoc),
146
+ is_assoc(Assoc, _Min, _Max, _Depth).
147
+
148
+ is_assoc(t,X,X,0) :- !.
149
+ is_assoc(t(K,_,-,t,t),K,K,1) :- !.
150
+ is_assoc(t(K,_,>,t,t(RK,_,-,t,t)),K,RK,2) :-
151
+ !, K @< RK.
152
+ is_assoc(t(K,_,<,t(LK,_,-,t,t),t),LK,K,2) :-
153
+ !, LK @< K.
154
+ is_assoc(t(K,_,B,L,R),Min,Max,Depth) :-
155
+ is_assoc(L,Min,LMax,LDepth),
156
+ is_assoc(R,RMin,Max,RDepth),
157
+ % Ensure Balance matches depth
158
+ compare(Rel,RDepth,LDepth),
159
+ balance(Rel,B),
160
+ % Ensure ordering
161
+ LMax @< K,
162
+ K @< RMin,
163
+ Depth is max(LDepth, RDepth)+1.
164
+
165
+ balance(=,-).
166
+ balance(<,<).
167
+ balance(>,>).
168
+
169
+
170
+ %! gen_assoc(?Key, +Assoc, ?Value) is nondet.
171
+ %
172
+ % True if Key-Value is an association in Assoc. Enumerates keys in
173
+ % ascending order on backtracking.
174
+ %
175
+ % @see get_assoc/3.
176
+
177
+ gen_assoc(Key, Assoc, Value) :-
178
+ ( ground(Key)
179
+ -> get_assoc(Key, Assoc, Value)
180
+ ; gen_assoc_(Key, Assoc, Value)
181
+ ).
182
+
183
+ gen_assoc_(Key, t(Key0,Val0,_,L,R), Val) =>
184
+ gen_assoc_(Key, Key0,Val0,L,R, Val).
185
+ gen_assoc_(_Key, t, _Val) =>
186
+ fail.
187
+
188
+ gen_assoc_(Key, _,_,L,_, Val) :-
189
+ gen_assoc_(Key, L, Val).
190
+ gen_assoc_(Key, Key,Val0,_,_, Val) :-
191
+ Val = Val0.
192
+ gen_assoc_(Key, _,_,_,R, Val) :-
193
+ gen_assoc_(Key, R, Val).
194
+
195
+
196
+ %! get_assoc(+Key, +Assoc, -Value) is semidet.
197
+ %
198
+ % True if Key-Value is an association in Assoc.
199
+
200
+ :- if(current_predicate('$btree_find_node'/5)).
201
+ get_assoc(Key, Tree, Val) :-
202
+ Tree \== t,
203
+ '$btree_find_node'(Key, Tree, 0x010405, Node, =),
204
+ arg(2, Node, Val).
205
+ :- else.
206
+ get_assoc(Key, t(K,V,_,L,R), Val) =>
207
+ compare(Rel, Key, K),
208
+ get_assoc(Rel, Key, V, L, R, Val).
209
+ get_assoc(_, t, _) =>
210
+ fail.
211
+
212
+ get_assoc(=, _, Val, _, _, Val).
213
+ get_assoc(<, Key, _, Tree, _, Val) :-
214
+ get_assoc(Key, Tree, Val).
215
+ get_assoc(>, Key, _, _, Tree, Val) :-
216
+ get_assoc(Key, Tree, Val).
217
+ :- endif.
218
+
219
+
220
+ %! get_assoc(+Key, +Assoc0, ?Val0, ?Assoc, ?Val) is semidet.
221
+ %
222
+ % True if Key-Val0 is in Assoc0 and Key-Val is in Assoc.
223
+
224
+ get_assoc(Key, t(K,V,B,L,R), Val, Assoc, NVal) =>
225
+ Assoc = t(K,NV,B,NL,NR),
226
+ compare(Rel, Key, K),
227
+ get_assoc(Rel, Key, V, L, R, Val, NV, NL, NR, NVal).
228
+ get_assoc(_Key, t, _Val, _, _) =>
229
+ fail.
230
+
231
+ get_assoc(=, _, Val, L, R, Val, NVal, L, R, NVal).
232
+ get_assoc(<, Key, V, L, R, Val, V, NL, R, NVal) :-
233
+ get_assoc(Key, L, Val, NL, NVal).
234
+ get_assoc(>, Key, V, L, R, Val, V, L, NR, NVal) :-
235
+ get_assoc(Key, R, Val, NR, NVal).
236
+
237
+
238
+ %! list_to_assoc(+Pairs, -Assoc) is det.
239
+ %
240
+ % Create an association from a list Pairs of Key-Value pairs. List
241
+ % must not contain duplicate keys.
242
+ %
243
+ % @error domain_error(unique_key_pairs, List) if List contains duplicate keys
244
+
245
+ list_to_assoc(List, Assoc) :-
246
+ ( List == []
247
+ -> Assoc = t
248
+ ; keysort(List, Sorted),
249
+ ( ord_pairs(Sorted)
250
+ -> length(Sorted, N),
251
+ list_to_assoc(N, Sorted, [], _, Assoc)
252
+ ; domain_error(unique_key_pairs, List)
253
+ )
254
+ ).
255
+
256
+ list_to_assoc(1, [K-V|More], More, 1, t(K,V,-,t,t)) :- !.
257
+ list_to_assoc(2, [K1-V1,K2-V2|More], More, 2, t(K2,V2,<,t(K1,V1,-,t,t),t)) :- !.
258
+ list_to_assoc(N, List, More, Depth, t(K,V,Balance,L,R)) :-
259
+ N0 is N - 1,
260
+ RN is N0 div 2,
261
+ Rem is N0 mod 2,
262
+ LN is RN + Rem,
263
+ list_to_assoc(LN, List, [K-V|Upper], LDepth, L),
264
+ list_to_assoc(RN, Upper, More, RDepth, R),
265
+ Depth is LDepth + 1,
266
+ compare(B, RDepth, LDepth), balance(B, Balance).
267
+
268
+ %! ord_list_to_assoc(+Pairs, -Assoc) is det.
269
+ %
270
+ % Assoc is created from an ordered list Pairs of Key-Value pairs. The
271
+ % pairs must occur in strictly ascending order of their keys.
272
+ %
273
+ % @error domain_error(key_ordered_pairs, List) if pairs are not ordered.
274
+
275
+ ord_list_to_assoc(Sorted, Assoc) :-
276
+ ( Sorted == []
277
+ -> Assoc = t
278
+ ; ( ord_pairs(Sorted)
279
+ -> length(Sorted, N),
280
+ list_to_assoc(N, Sorted, [], _, Assoc)
281
+ ; domain_error(key_ordered_pairs, Sorted)
282
+ )
283
+ ).
284
+
285
+ %! ord_pairs(+Pairs) is semidet
286
+ %
287
+ % True if Pairs is a list of Key-Val pairs strictly ordered by key.
288
+
289
+ ord_pairs([K-_V|Rest]) :-
290
+ ord_pairs(Rest, K).
291
+ ord_pairs([], _K).
292
+ ord_pairs([K-_V|Rest], K0) :-
293
+ K0 @< K,
294
+ ord_pairs(Rest, K).
295
+
296
+ %! map_assoc(:Pred, +Assoc) is semidet.
297
+ %
298
+ % True if Pred(Value) is true for all values in Assoc.
299
+
300
+ map_assoc(Pred, T) :-
301
+ map_assoc_(T, Pred).
302
+
303
+ map_assoc_(t, _) =>
304
+ true.
305
+ map_assoc_(t(_,Val,_,L,R), Pred) =>
306
+ map_assoc_(L, Pred),
307
+ call(Pred, Val),
308
+ map_assoc_(R, Pred).
309
+
310
+ %! map_assoc(:Pred, +Assoc0, ?Assoc) is semidet.
311
+ %
312
+ % Map corresponding values. True if Assoc is Assoc0 with Pred applied
313
+ % to all corresponding pairs of of values.
314
+
315
+ map_assoc(Pred, T0, T) :-
316
+ map_assoc_(T0, Pred, T).
317
+
318
+ map_assoc_(t, _, Assoc) =>
319
+ Assoc = t.
320
+ map_assoc_(t(Key,Val,B,L0,R0), Pred, Assoc) =>
321
+ Assoc = t(Key,Ans,B,L1,R1),
322
+ map_assoc_(L0, Pred, L1),
323
+ call(Pred, Val, Ans),
324
+ map_assoc_(R0, Pred, R1).
325
+
326
+
327
+ %! max_assoc(+Assoc, -Key, -Value) is semidet.
328
+ %
329
+ % True if Key-Value is in Assoc and Key is the largest key.
330
+
331
+ max_assoc(t(K,V,_,_,R), Key, Val) =>
332
+ max_assoc(R, K, V, Key, Val).
333
+ max_assoc(t, _, _) =>
334
+ fail.
335
+
336
+ max_assoc(t, K, V, K, V).
337
+ max_assoc(t(K,V,_,_,R), _, _, Key, Val) :-
338
+ max_assoc(R, K, V, Key, Val).
339
+
340
+
341
+ %! min_assoc(+Assoc, -Key, -Value) is semidet.
342
+ %
343
+ % True if Key-Value is in assoc and Key is the smallest key.
344
+
345
+ min_assoc(t(K,V,_,L,_), Key, Val) =>
346
+ min_assoc(L, K, V, Key, Val).
347
+ min_assoc(t, _, _) =>
348
+ fail.
349
+
350
+ min_assoc(t, K, V, K, V).
351
+ min_assoc(t(K,V,_,L,_), _, _, Key, Val) :-
352
+ min_assoc(L, K, V, Key, Val).
353
+
354
+
355
+ %! put_assoc(+Key, +Assoc0, +Value, -Assoc) is det.
356
+ %
357
+ % Assoc is Assoc0, except that Key is associated with Value. This can
358
+ % be used to insert and change associations.
359
+
360
+ put_assoc(Key, A0, Value, A) :-
361
+ insert(A0, Key, Value, A, _).
362
+
363
+ insert(t, Key, Val, Assoc, Changed) =>
364
+ Assoc = t(Key,Val,-,t,t),
365
+ Changed = yes.
366
+ insert(t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) =>
367
+ compare(Rel, K, Key),
368
+ insert(Rel, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged).
369
+
370
+ insert(=, t(Key,_,B,L,R), _, V, t(Key,V,B,L,R), no).
371
+ insert(<, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) :-
372
+ insert(L, K, V, NewL, LeftHasChanged),
373
+ adjust(LeftHasChanged, t(Key,Val,B,NewL,R), left, NewTree, WhatHasChanged).
374
+ insert(>, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) :-
375
+ insert(R, K, V, NewR, RightHasChanged),
376
+ adjust(RightHasChanged, t(Key,Val,B,L,NewR), right, NewTree, WhatHasChanged).
377
+
378
+ adjust(no, Oldree, _, Oldree, no).
379
+ adjust(yes, t(Key,Val,B0,L,R), LoR, NewTree, WhatHasChanged) :-
380
+ table(B0, LoR, B1, WhatHasChanged, ToBeRebalanced),
381
+ rebalance(ToBeRebalanced, t(Key,Val,B0,L,R), B1, NewTree, _, _).
382
+
383
+ % balance where balance whole tree to be
384
+ % before inserted after increased rebalanced
385
+ table(- , left , < , yes , no ) :- !.
386
+ table(- , right , > , yes , no ) :- !.
387
+ table(< , left , - , no , yes ) :- !.
388
+ table(< , right , - , no , no ) :- !.
389
+ table(> , left , - , no , no ) :- !.
390
+ table(> , right , - , no , yes ) :- !.
391
+
392
+ %! del_min_assoc(+Assoc0, ?Key, ?Val, -Assoc) is semidet.
393
+ %
394
+ % True if Key-Value is in Assoc0 and Key is the smallest key. Assoc is
395
+ % Assoc0 with Key-Value removed. Warning: This will succeed with _no_
396
+ % bindings for Key or Val if Assoc0 is empty.
397
+
398
+ del_min_assoc(Tree, Key, Val, NewTree) :-
399
+ del_min_assoc(Tree, Key, Val, NewTree, _DepthChanged).
400
+
401
+ del_min_assoc(t(Key,Val,_B,t,R), Key, Val, R, yes) :- !.
402
+ del_min_assoc(t(K,V,B,L,R), Key, Val, NewTree, Changed) :-
403
+ del_min_assoc(L, Key, Val, NewL, LeftChanged),
404
+ deladjust(LeftChanged, t(K,V,B,NewL,R), left, NewTree, Changed).
405
+
406
+ %! del_max_assoc(+Assoc0, ?Key, ?Val, -Assoc) is semidet.
407
+ %
408
+ % True if Key-Value is in Assoc0 and Key is the greatest key. Assoc is
409
+ % Assoc0 with Key-Value removed. Warning: This will succeed with _no_
410
+ % bindings for Key or Val if Assoc0 is empty.
411
+
412
+ del_max_assoc(Tree, Key, Val, NewTree) :-
413
+ del_max_assoc(Tree, Key, Val, NewTree, _DepthChanged).
414
+
415
+ del_max_assoc(t(Key,Val,_B,L,t), Key, Val, L, yes) :- !.
416
+ del_max_assoc(t(K,V,B,L,R), Key, Val, NewTree, Changed) :-
417
+ del_max_assoc(R, Key, Val, NewR, RightChanged),
418
+ deladjust(RightChanged, t(K,V,B,L,NewR), right, NewTree, Changed).
419
+
420
+ %! del_assoc(+Key, +Assoc0, ?Value, -Assoc) is semidet.
421
+ %
422
+ % True if Key-Value is in Assoc0. Assoc is Assoc0 with
423
+ % Key-Value removed.
424
+
425
+ del_assoc(Key, A0, Value, A) :-
426
+ delete(A0, Key, Value, A, _).
427
+
428
+ % delete(+Subtree, +SearchedKey, ?SearchedValue, ?SubtreeOut, ?WhatHasChanged)
429
+ delete(t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) =>
430
+ compare(Rel, K, Key),
431
+ delete(Rel, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged).
432
+ delete(t, _, _, _, _) =>
433
+ fail.
434
+
435
+ % delete(+KeySide, +Subtree, +SearchedKey, ?SearchedValue, ?SubtreeOut, ?WhatHasChanged)
436
+ % KeySide is an operator {<,=,>} indicating which branch should be searched for the key.
437
+ % WhatHasChanged {yes,no} indicates whether the NewTree has changed in depth.
438
+ delete(=, t(Key,Val,_B,t,R), Key, Val, R, yes) :- !.
439
+ delete(=, t(Key,Val,_B,L,t), Key, Val, L, yes) :- !.
440
+ delete(=, t(Key,Val,>,L,R), Key, Val, NewTree, WhatHasChanged) :-
441
+ % Rh tree is deeper, so rotate from R to L
442
+ del_min_assoc(R, K, V, NewR, RightHasChanged),
443
+ deladjust(RightHasChanged, t(K,V,>,L,NewR), right, NewTree, WhatHasChanged),
444
+ !.
445
+ delete(=, t(Key,Val,B,L,R), Key, Val, NewTree, WhatHasChanged) :-
446
+ % Rh tree is not deeper, so rotate from L to R
447
+ del_max_assoc(L, K, V, NewL, LeftHasChanged),
448
+ deladjust(LeftHasChanged, t(K,V,B,NewL,R), left, NewTree, WhatHasChanged),
449
+ !.
450
+
451
+ delete(<, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) :-
452
+ delete(L, K, V, NewL, LeftHasChanged),
453
+ deladjust(LeftHasChanged, t(Key,Val,B,NewL,R), left, NewTree, WhatHasChanged).
454
+ delete(>, t(Key,Val,B,L,R), K, V, NewTree, WhatHasChanged) :-
455
+ delete(R, K, V, NewR, RightHasChanged),
456
+ deladjust(RightHasChanged, t(Key,Val,B,L,NewR), right, NewTree, WhatHasChanged).
457
+
458
+ deladjust(no, OldTree, _, OldTree, no).
459
+ deladjust(yes, t(Key,Val,B0,L,R), LoR, NewTree, RealChange) :-
460
+ deltable(B0, LoR, B1, WhatHasChanged, ToBeRebalanced),
461
+ rebalance(ToBeRebalanced, t(Key,Val,B0,L,R), B1, NewTree, WhatHasChanged, RealChange).
462
+
463
+ % balance where balance whole tree to be
464
+ % before deleted after changed rebalanced
465
+ deltable(- , right , < , no , no ) :- !.
466
+ deltable(- , left , > , no , no ) :- !.
467
+ deltable(< , right , - , yes , yes ) :- !.
468
+ deltable(< , left , - , yes , no ) :- !.
469
+ deltable(> , right , - , yes , no ) :- !.
470
+ deltable(> , left , - , yes , yes ) :- !.
471
+ % It depends on the tree pattern in avl_geq whether it really decreases.
472
+
473
+ % Single and double tree rotations - these are common for insert and delete.
474
+ /* The patterns (>)-(>), (>)-( <), ( <)-( <) and ( <)-(>) on the LHS
475
+ always change the tree height and these are the only patterns which can
476
+ happen after an insertion. That's the reason why we can use a table only to
477
+ decide the needed changes.
478
+
479
+ The patterns (>)-( -) and ( <)-( -) do not change the tree height. After a
480
+ deletion any pattern can occur and so we return yes or no as a flag of a
481
+ height change. */
482
+
483
+
484
+ rebalance(no, t(K,V,_,L,R), B, t(K,V,B,L,R), Changed, Changed).
485
+ rebalance(yes, OldTree, _, NewTree, _, RealChange) :-
486
+ avl_geq(OldTree, NewTree, RealChange).
487
+
488
+ avl_geq(t(A,VA,>,Alpha,t(B,VB,>,Beta,Gamma)),
489
+ t(B,VB,-,t(A,VA,-,Alpha,Beta),Gamma), yes) :- !.
490
+ avl_geq(t(A,VA,>,Alpha,t(B,VB,-,Beta,Gamma)),
491
+ t(B,VB,<,t(A,VA,>,Alpha,Beta),Gamma), no) :- !.
492
+ avl_geq(t(B,VB,<,t(A,VA,<,Alpha,Beta),Gamma),
493
+ t(A,VA,-,Alpha,t(B,VB,-,Beta,Gamma)), yes) :- !.
494
+ avl_geq(t(B,VB,<,t(A,VA,-,Alpha,Beta),Gamma),
495
+ t(A,VA,>,Alpha,t(B,VB,<,Beta,Gamma)), no) :- !.
496
+ avl_geq(t(A,VA,>,Alpha,t(B,VB,<,t(X,VX,B1,Beta,Gamma),Delta)),
497
+ t(X,VX,-,t(A,VA,B2,Alpha,Beta),t(B,VB,B3,Gamma,Delta)), yes) :-
498
+ !,
499
+ table2(B1, B2, B3).
500
+ avl_geq(t(B,VB,<,t(A,VA,>,Alpha,t(X,VX,B1,Beta,Gamma)),Delta),
501
+ t(X,VX,-,t(A,VA,B2,Alpha,Beta),t(B,VB,B3,Gamma,Delta)), yes) :-
502
+ !,
503
+ table2(B1, B2, B3).
504
+
505
+ table2(< ,- ,> ).
506
+ table2(> ,< ,- ).
507
+ table2(- ,- ,- ).
508
+
509
+
510
+ /*******************************
511
+ * ERRORS *
512
+ *******************************/
513
+
514
+ :- multifile
515
+ error:has_type/2.
516
+
517
+ error:has_type(assoc, X) :-
518
+ ( X == t
519
+ -> true
520
+ ; compound(X),
521
+ compound_name_arity(X, t, 5)
522
+ ).
@@ -0,0 +1,169 @@
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) 2013-2018, University of Amsterdam
7
+ VU University Amsterdam
8
+ CWI, Amsterdam
9
+ All rights reserved.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions
13
+ are met:
14
+
15
+ 1. Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ 2. Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer in
20
+ the documentation and/or other materials provided with the
21
+ distribution.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
+ POSSIBILITY OF SUCH DAMAGE.
35
+ */
36
+
37
+ :- module(atom,
38
+ [ restyle_identifier/3, % +Style, +In, +Out
39
+ identifier_parts/2, % +Identifier, -Parts
40
+ join_identifier_parts/3 % +Style, +Parts, -Identifier
41
+ ]).
42
+ :- autoload(library(apply),[maplist/2,maplist/3]).
43
+ :- autoload(library(ctypes),[is_upper/1]).
44
+
45
+
46
+ /** <module> Operations on atoms
47
+
48
+ This library provides operations on atoms that are not covered by
49
+ builtin predicates. The current implementation is just a start, making
50
+ code developed in _xpce_ and duplicated in various projects reusable.
51
+ */
52
+
53
+
54
+ /*******************************
55
+ * RESTYLE IDENTIFIERS *
56
+ *******************************/
57
+
58
+ %! restyle_identifier(+Style, +In, -Out) is det.
59
+ %
60
+ % Restyle an identifier by extracting the alnum substrings and
61
+ % joining them together according to Style.
62
+ %
63
+ % @arg Style is one of `'OneTwo'`, `oneTwo`, `one_two`, `'One_Two'` or
64
+ % a term style(CapitaliseFirst, CapitaliseRest, Separator).
65
+
66
+ % @see join_identifier_parts/3.
67
+
68
+ restyle_identifier(Style, In, Out) :-
69
+ identifier_parts(In, Parts),
70
+ join_identifier_parts(Style, Parts, Out).
71
+
72
+
73
+ %! identifier_parts(+Identifier, -Parts) is det.
74
+ %
75
+ % Parts is a list of atoms that make up Identifier. The parts
76
+ % found are turned into lowercase, unless all its characters are
77
+ % uppercase. E.g.,
78
+ %
79
+ % ?- identifier_parts('sourceCodeURI', X).
80
+ % X = [source, code, 'URI'].
81
+
82
+ identifier_parts(';', [';']) :- !.
83
+ identifier_parts('|', ['|']) :- !.
84
+ identifier_parts('!', ['!']) :- !.
85
+ identifier_parts(',', [',']) :- !.
86
+ identifier_parts(Name, Parts) :-
87
+ atom_codes(Name, Codes),
88
+ ( phrase(identifier_parts(Parts), Codes)
89
+ -> true
90
+ ; maplist(is_symbol_code, Codes)
91
+ -> Parts = [Name]
92
+ ).
93
+
94
+ is_symbol_code(Code) :-
95
+ code_type(Code, prolog_symbol).
96
+
97
+ identifier_parts([H|T]) -->
98
+ identifier_part(H),
99
+ !,
100
+ identifier_parts(T).
101
+ identifier_parts([]) --> [].
102
+
103
+ identifier_part(H) -->
104
+ string(Codes, Tail),
105
+ sep(Tail),
106
+ !,
107
+ { Codes = [_|_],
108
+ atom_codes(H0, Codes),
109
+ ( maplist(is_upper, Codes)
110
+ -> H = H0
111
+ ; downcase_atom(H0, H)
112
+ )
113
+ }.
114
+
115
+ string(T,T) --> [].
116
+ string([H|T], L) --> [H], string(T, L).
117
+
118
+ sep([]) --> sep_char, !, sep_chars.
119
+ sep([T]), [N] -->
120
+ [T,N],
121
+ { code_type(T, lower),
122
+ code_type(N, upper)
123
+ }.
124
+ sep([],[],[]).
125
+
126
+ sep_char -->
127
+ [H],
128
+ { \+ code_type(H, alnum) }.
129
+
130
+ sep_chars --> sep_char, !, sep_chars.
131
+ sep_chars --> [].
132
+
133
+ %! join_identifier_parts(+Style, +Parts, -Identifier)
134
+ %
135
+ % Join parts of an identifier according to Style. Style is one of:
136
+ %
137
+ % - 'OneTwo'
138
+ % - oneTwo
139
+ % - one_two
140
+ % - 'One_Two'
141
+ % Predefined self explanatory style identifiers
142
+ % - style(+CapitaliseFirst, +CapitaliseRest, +Separator)
143
+ % This generalises the above styles. CapitaliseFirst defines
144
+ % whether the first character of the first part must be a
145
+ % capital, CapitaliseRest defines capitalization of the remaining
146
+ % identifier parts and Separator is the character to place between
147
+ % the parts.
148
+
149
+ join_identifier_parts(Style, [First|Parts], Identifier) :-
150
+ style(Style, CapFirst, CapRest, Sep),
151
+ capitalise(CapFirst, First, H),
152
+ maplist(capitalise(CapRest), Parts, T),
153
+ atomic_list_concat([H|T], Sep, Identifier).
154
+
155
+ %! style(?Style, ?CapitaliseFirst, ?CapitaliseRest, ?Separator)
156
+
157
+ style('OneTwo', true, true, '').
158
+ style(oneTwo, false, true, '').
159
+ style(one_two, false, false, '_').
160
+ style('One_Two', true, true, '_').
161
+ style(style(CFirst, CRest, Sep), CFirst, CRest, Sep).
162
+
163
+ capitalise(false, X, X) :- !.
164
+ capitalise(true, X, Y) :-
165
+ atom_codes(X, [H0|T]),
166
+ code_type(H0, to_lower(H)),
167
+ atom_codes(Y, [H|T]).
168
+
169
+