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,574 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Paulo Moura
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2015, Paulo Moura, Kyndi Inc., VU University Amsterdam
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(yall,
36
+ [ (>>)/2, (>>)/3, (>>)/4, (>>)/5, (>>)/6, (>>)/7, (>>)/8, (>>)/9,
37
+ (/)/2, (/)/3, (/)/4, (/)/5, (/)/6, (/)/7, (/)/8, (/)/9,
38
+
39
+ lambda_calls/2, % +LambdaExt, -Goal
40
+ lambda_calls/3, % +Lambda, +Args, -Goal
41
+ is_lambda/1 % @Term
42
+ ]).
43
+ :- autoload(library(error),
44
+ [ instantiation_error/1,
45
+ must_be/2,
46
+ domain_error/2,
47
+ type_error/2
48
+ ]).
49
+ :- autoload(library(lists),[append/3]).
50
+
51
+
52
+ :- meta_predicate
53
+ '>>'(?, 0),
54
+ '>>'(?, :, ?),
55
+ '>>'(?, :, ?, ?),
56
+ '>>'(?, :, ?, ?, ?),
57
+ '>>'(?, :, ?, ?, ?, ?),
58
+ '>>'(?, :, ?, ?, ?, ?, ?),
59
+ '>>'(?, :, ?, ?, ?, ?, ?, ?),
60
+ '>>'(?, :, ?, ?, ?, ?, ?, ?, ?).
61
+
62
+ :- meta_predicate
63
+ '/'(?, 0),
64
+ '/'(?, 1, ?),
65
+ '/'(?, 2, ?, ?),
66
+ '/'(?, 3, ?, ?, ?),
67
+ '/'(?, 4, ?, ?, ?, ?),
68
+ '/'(?, 5, ?, ?, ?, ?, ?),
69
+ '/'(?, 6, ?, ?, ?, ?, ?, ?),
70
+ '/'(?, 7, ?, ?, ?, ?, ?, ?, ?).
71
+
72
+ /** <module> Lambda expressions
73
+
74
+ Prolog realizes _high-order_ programming with meta-calling. The core
75
+ predicate of this is call/1, which simply calls its argument. This can
76
+ be used to define higher-order predicates such as ignore/1 or forall/2.
77
+ The call/N construct calls a _closure_ with N-1 _additional arguments_.
78
+ This is used to define higher-order predicates such as the maplist/2-5
79
+ family or foldl/4-7.
80
+
81
+ The _closure_ concept used here is somewhat different from the closure
82
+ concept from functional programming. The latter is a function that is
83
+ always evaluated in the context that existed at function creation time.
84
+ Here, a closure is a term of arity _0 =< L =< K_. The term's functor is
85
+ the name of a predicate of arity _K_ and the term's _L_ arguments (where
86
+ _L_ could be 0) correspond to _L_ leftmost arguments of said predicate,
87
+ bound to parameter values. For example, a closure involving
88
+ atom_concat/3 might be the term atom_concat(prefix). In order of
89
+ increasing _L_, one would have increasingly more complete closures that
90
+ could be passed to call/3, all giving the same result:
91
+
92
+ ```
93
+ call(atom_concat,prefix,suffix,R).
94
+ call(atom_concat(prefix),suffix,R).
95
+ call(atom_concat(prefix,suffix),R).
96
+ call(atom_concat(prefix,suffix,R)).
97
+ ```
98
+
99
+ The problem with higher order predicates based on call/N is that the
100
+ additional arguments are always added to the end of the closure's
101
+ argument list. This often requires defining trivial helper predicates to
102
+ get the argument order right. For example, if you want to add a common
103
+ postfix to a list of atoms you need to apply
104
+ atom_concat(In,Postfix,Out), but
105
+ maplist(atom_concat(Postfix),ListIn,ListOut) calls
106
+ atom_concat(Postfix,In,Out). This is where library(yall) comes in, where
107
+ the module name, _yall_, stands for _Yet Another Lambda Library_.
108
+
109
+ The library allows us to write a lambda expression that _wraps around_
110
+ the (possibly complex) goal to call:
111
+
112
+ ```
113
+ ?- maplist([In,Out]>>atom_concat(In,'_p',Out), [a,b], ListOut).
114
+ ListOut = [a_p, b_p].
115
+ ```
116
+
117
+ A bracy list `{...}` specifies which variables are _shared_ between the
118
+ wrapped goal and the surrounding context. This allows us to write the
119
+ code below. Without the `{Postfix}` a fresh variable would be passed to
120
+ atom_concat/3.
121
+
122
+ ```
123
+ add_postfix(Postfix, ListIn, ListOut) :-
124
+ maplist({Postfix}/[In,Out]>>atom_concat(In,Postfix,Out),
125
+ ListIn, ListOut).
126
+ ```
127
+
128
+ This introduces the second application area of lambda expressions: the
129
+ ability to confine variables to the called goal's context. This features
130
+ shines when combined with bagof/3 or setof/3 where one normally has to
131
+ list those variables whose bindings one is _not_ interested in using the
132
+ `Var^Goal` construct (marking `Var` as existentially quantified and
133
+ confining it to the called goal's context). Lambda expressions allow you
134
+ to do the converse: specify the variables which one _is_ interested in.
135
+ These variables are common to the context of the called goal and the
136
+ surrounding context.
137
+
138
+ Lambda expressions use the syntax below
139
+
140
+ ```
141
+ {...}/[...]>>Goal.
142
+ ```
143
+
144
+ The `{...}` optional part is used for lambda-free variables (the ones
145
+ shared between contexts). The order of variables doesn't matter, hence
146
+ the `{...}` set notation.
147
+
148
+ The `[...]` optional part lists lambda parameters. Here, order of
149
+ variables matters, hence the list notation.
150
+
151
+ As `/` and `>>` are standard infix operators, no new operators are added
152
+ by this library. An advantage of this syntax is that we can simply unify
153
+ a lambda expression with `{Free}/[Parameters]>>Lambda` to access each of
154
+ its components. Spaces in the lambda expression are not a problem
155
+ although the goal may need to be written between '()'s. Goals that are
156
+ qualified by a module prefix also need to be wrapped inside parentheses.
157
+
158
+ Combined with library(apply_macros), library(yall) allows writing
159
+ one-liners for many list operations that have the same performance as
160
+ hand-written code.
161
+
162
+ This module implements [Logtalk's lambda expressions
163
+ syntax](https://logtalk.org/manuals/refman/grammar.html#lambda-expressions).
164
+
165
+
166
+ The development of this module was sponsored by Kyndi, Inc.
167
+
168
+ @tbd Extend optimization support
169
+ @author Paulo Moura and Jan Wielemaker
170
+ */
171
+
172
+ %! >>(+Parameters, +Lambda).
173
+ %! >>(+Parameters, +Lambda, ?A1).
174
+ %! >>(+Parameters, +Lambda, ?A1, ?A2).
175
+ %! >>(+Parameters, +Lambda, ?A1, ?A2, ?A3).
176
+ %! >>(+Parameters, +Lambda, ?A1, ?A2, ?A3, ?A4).
177
+ %! >>(+Parameters, +Lambda, ?A1, ?A2, ?A3, ?A4, ?A5).
178
+ %! >>(+Parameters, +Lambda, ?A1, ?A2, ?A3, ?A4, ?A5, ?A6).
179
+ %! >>(+Parameters, +Lambda, ?A1, ?A2, ?A3, ?A4, ?A5, ?A6, ?A7).
180
+ %
181
+ % Calls a copy of Lambda. This is similar to call(Lambda,A1,...),
182
+ % but arguments are reordered according to the list Parameters:
183
+ %
184
+ % - The first length(Parameters) arguments from A1, ... are
185
+ % unified with (a copy of) Parameters, which _may_ share
186
+ % them with variables in Lambda.
187
+ % - Possible excess arguments are passed by position.
188
+ %
189
+ % @arg Parameters is either a plain list of parameters or a term
190
+ % `{Free}/List`. `Free` represents variables that are
191
+ % shared between the context and the Lambda term. This
192
+ % is needed for compiling Lambda expressions.
193
+
194
+ '>>'(Parms, Lambda) :-
195
+ unify_lambda_parameters(Parms, [],
196
+ ExtraArgs, Lambda, LambdaCopy),
197
+ Goal =.. [call, LambdaCopy| ExtraArgs],
198
+ call(Goal).
199
+
200
+ '>>'(Parms, Lambda, A1) :-
201
+ unify_lambda_parameters(Parms, [A1],
202
+ ExtraArgs, Lambda, LambdaCopy),
203
+ Goal =.. [call, LambdaCopy| ExtraArgs],
204
+ call(Goal).
205
+
206
+ '>>'(Parms, Lambda, A1, A2) :-
207
+ unify_lambda_parameters(Parms, [A1,A2],
208
+ ExtraArgs, Lambda, LambdaCopy),
209
+ Goal =.. [call, LambdaCopy| ExtraArgs],
210
+ call(Goal).
211
+
212
+ '>>'(Parms, Lambda, A1, A2, A3) :-
213
+ unify_lambda_parameters(Parms, [A1,A2,A3],
214
+ ExtraArgs, Lambda, LambdaCopy),
215
+ Goal =.. [call, LambdaCopy| ExtraArgs],
216
+ call(Goal).
217
+
218
+ '>>'(Parms, Lambda, A1, A2, A3, A4) :-
219
+ unify_lambda_parameters(Parms, [A1,A2,A3,A4],
220
+ ExtraArgs, Lambda, LambdaCopy),
221
+ Goal =.. [call, LambdaCopy| ExtraArgs],
222
+ call(Goal).
223
+
224
+ '>>'(Parms, Lambda, A1, A2, A3, A4, A5) :-
225
+ unify_lambda_parameters(Parms, [A1,A2,A3,A4,A5],
226
+ ExtraArgs, Lambda, LambdaCopy),
227
+ Goal =.. [call, LambdaCopy| ExtraArgs],
228
+ call(Goal).
229
+
230
+ '>>'(Parms, Lambda, A1, A2, A3, A4, A5, A6) :-
231
+ unify_lambda_parameters(Parms, [A1,A2,A3,A4,A5,A6],
232
+ ExtraArgs, Lambda, LambdaCopy),
233
+ Goal =.. [call, LambdaCopy| ExtraArgs],
234
+ call(Goal).
235
+
236
+ '>>'(Parms, Lambda, A1, A2, A3, A4, A5, A6, A7) :-
237
+ unify_lambda_parameters(Parms, [A1,A2,A3,A4,A5,A6,A7],
238
+ ExtraArgs, Lambda, LambdaCopy),
239
+ Goal =.. [call, LambdaCopy| ExtraArgs],
240
+ call(Goal).
241
+
242
+ %! /(+Free, :Lambda).
243
+ %! /(+Free, :Lambda, ?A1).
244
+ %! /(+Free, :Lambda, ?A1, ?A2).
245
+ %! /(+Free, :Lambda, ?A1, ?A2, ?A3).
246
+ %! /(+Free, :Lambda, ?A1, ?A2, ?A3, ?A4).
247
+ %! /(+Free, :Lambda, ?A1, ?A2, ?A3, ?A4, ?A5).
248
+ %! /(+Free, :Lambda, ?A1, ?A2, ?A3, ?A4, ?A5, ?A6).
249
+ %! /(+Free, :Lambda, ?A1, ?A2, ?A3, ?A4, ?A5, ?A6, ?A7).
250
+ %
251
+ % Shorthand for `Free/[]>>Lambda`. This is the same as applying
252
+ % call/N on Lambda, except that only variables appearing in Free
253
+ % are bound by the call. For example
254
+ %
255
+ % ==
256
+ % p(1,a).
257
+ % p(2,b).
258
+ %
259
+ % ?- {X}/p(X,Y).
260
+ % X = 1;
261
+ % X = 2.
262
+ % ==
263
+ %
264
+ % This can in particularly be combined with bagof/3 and setof/3 to
265
+ % _select_ particular variables to be concerned rather than using
266
+ % existential quantification (^/2) to _exclude_ variables. For
267
+ % example, the two calls below are equivalent.
268
+ %
269
+ % ==
270
+ % setof(X, Y^p(X,Y), Xs)
271
+ % setof(X, {X}/p(X,_), Xs)
272
+ % ==
273
+
274
+
275
+ '/'(Free, Lambda) :-
276
+ lambda_free(Free),
277
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
278
+ call(LambdaCopy).
279
+
280
+ '/'(Free, Lambda, A1) :-
281
+ lambda_free(Free),
282
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
283
+ call(LambdaCopy, A1).
284
+
285
+ '/'(Free, Lambda, A1, A2) :-
286
+ lambda_free(Free),
287
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
288
+ call(LambdaCopy, A1, A2).
289
+
290
+ '/'(Free, Lambda, A1, A2, A3) :-
291
+ lambda_free(Free),
292
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
293
+ call(LambdaCopy, A1, A2, A3).
294
+
295
+ '/'(Free, Lambda, A1, A2, A3, A4) :-
296
+ lambda_free(Free),
297
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
298
+ call(LambdaCopy, A1, A2, A3, A4).
299
+
300
+ '/'(Free, Lambda, A1, A2, A3, A4, A5) :-
301
+ lambda_free(Free),
302
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
303
+ call(LambdaCopy, A1, A2, A3, A4, A5).
304
+
305
+ '/'(Free, Lambda, A1, A2, A3, A4, A5, A6) :-
306
+ lambda_free(Free),
307
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
308
+ call(LambdaCopy, A1, A2, A3, A4, A5, A6).
309
+
310
+ '/'(Free, Lambda, A1, A2, A3, A4, A5, A6, A7) :-
311
+ lambda_free(Free),
312
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
313
+ call(LambdaCopy, A1, A2, A3, A4, A5, A6, A7).
314
+
315
+
316
+ %! unify_lambda_parameters(+ParmsAndFree, +Args, -CallArgs,
317
+ %! +Lambda, -LambdaCopy) is det.
318
+ %
319
+ % @arg ParmsAndFree is the first argumen of `>>`, either a list
320
+ % of parameters or a term `{Free}/Params`.
321
+ % @arg Args is a list of input parameters, args 3.. from `>>`
322
+ % @arg CallArgs are the calling arguments for the Lambda
323
+ % expression. I.e., we call call(LambdaCopy, CallArgs).
324
+
325
+ unify_lambda_parameters(Parms, _Args, _ExtraArgs, _Lambda, _LambdaCopy) :-
326
+ var(Parms),
327
+ !,
328
+ instantiation_error(Parms).
329
+ unify_lambda_parameters(Free/Parms, Args, ExtraArgs, Lambda, LambdaCopy) :-
330
+ !,
331
+ lambda_free(Free),
332
+ must_be(list, Parms),
333
+ copy_term_nat(Free/Parms>>Lambda, Free/ParmsCopy>>LambdaCopy),
334
+ unify_lambda_parameters_(ParmsCopy, Args, ExtraArgs,
335
+ Free/Parms>>Lambda).
336
+ unify_lambda_parameters(Parms, Args, ExtraArgs, Lambda, LambdaCopy) :-
337
+ must_be(list, Parms),
338
+ copy_term_nat(Parms>>Lambda, ParmsCopy>>LambdaCopy),
339
+ unify_lambda_parameters_(ParmsCopy, Args, ExtraArgs,
340
+ Parms>>Lambda).
341
+
342
+ unify_lambda_parameters_([], ExtraArgs, ExtraArgs, _) :- !.
343
+ unify_lambda_parameters_([Parm|Parms], [Arg|Args], ExtraArgs, Culprit) :-
344
+ !,
345
+ Parm = Arg,
346
+ unify_lambda_parameters_(Parms, Args, ExtraArgs, Culprit).
347
+ unify_lambda_parameters_(_,_,_,Culprit) :-
348
+ domain_error(lambda_parameters, Culprit).
349
+
350
+ lambda_free(Free) :-
351
+ var(Free),
352
+ !,
353
+ instantiation_error(Free).
354
+ lambda_free({_}) :- !.
355
+ lambda_free({}) :- !.
356
+ lambda_free(Free) :-
357
+ type_error(lambda_free, Free).
358
+
359
+ %! expand_lambda(+Goal, -Head) is semidet.
360
+ %
361
+ % True if Goal is a sufficiently instantiated Lambda expression
362
+ % that is compiled to the predicate Head. The predicate Head is
363
+ % added to the current compilation context using
364
+ % compile_aux_clauses/1.
365
+
366
+ expand_lambda(Goal, Head) :-
367
+ Goal =.. ['>>', Parms, Lambda| ExtraArgs],
368
+ is_callable(Lambda),
369
+ nonvar(Parms),
370
+ lambda_functor(Parms>>Lambda, Functor),
371
+ ( Parms = Free/ExtraArgs
372
+ -> is_lambda_free(Free),
373
+ free_to_list(Free, FreeList)
374
+ ; Parms = ExtraArgs,
375
+ FreeList = []
376
+ ),
377
+ append(FreeList, ExtraArgs, Args),
378
+ Head =.. [Functor|Args],
379
+ compile_aux_clause_if_new(Head, Lambda).
380
+ expand_lambda(Goal, Head) :-
381
+ Goal =.. ['/', Free, Closure|ExtraArgs],
382
+ is_lambda_free(Free),
383
+ is_callable(Closure),
384
+ free_to_list(Free, FreeList),
385
+ lambda_functor(Free/Closure, Functor),
386
+ append(FreeList, ExtraArgs, Args),
387
+ Head =.. [Functor|Args],
388
+ Closure =.. [ClosureFunctor|ClosureArgs],
389
+ append(ClosureArgs, ExtraArgs, LambdaArgs),
390
+ Lambda =.. [ClosureFunctor|LambdaArgs],
391
+ compile_aux_clause_if_new(Head, Lambda).
392
+
393
+ lambda_functor(Term, Functor) :-
394
+ copy_term_nat(Term, Copy),
395
+ variant_sha1(Copy, Functor0),
396
+ atom_concat('__aux_yall_', Functor0, Functor).
397
+
398
+ free_to_list({}, []).
399
+ free_to_list({VarsConj}, Vars) :-
400
+ conjunction_to_list(VarsConj, Vars).
401
+
402
+ conjunction_to_list(Term, [Term]) :-
403
+ var(Term),
404
+ !.
405
+ conjunction_to_list((Term, Conjunction), [Term|Terms]) :-
406
+ !,
407
+ conjunction_to_list(Conjunction, Terms).
408
+ conjunction_to_list(Term, [Term]).
409
+
410
+ compile_aux_clause_if_new(Head, Lambda) :-
411
+ prolog_load_context(module, Context),
412
+ ( predicate_property(Context:Head, defined)
413
+ -> true
414
+ ; expand_goal(Lambda, LambdaExpanded),
415
+ compile_aux_clauses([(Head :- LambdaExpanded)])
416
+ ).
417
+
418
+ lambda_like(Goal) :-
419
+ compound(Goal),
420
+ compound_name_arity(Goal, Name, Arity),
421
+ lambda_functor(Name),
422
+ Arity >= 2.
423
+
424
+ lambda_functor(>>).
425
+ lambda_functor(/).
426
+
427
+ :- dynamic system:goal_expansion/2.
428
+ :- multifile system:goal_expansion/2.
429
+
430
+ system:goal_expansion(Goal, Head) :-
431
+ lambda_like(Goal),
432
+ prolog_load_context(source, _),
433
+ \+ current_prolog_flag(xref, true),
434
+ expand_lambda(Goal, Head).
435
+
436
+ %! is_lambda(@Term) is semidet.
437
+ %
438
+ % True if Term is a valid Lambda expression.
439
+
440
+ is_lambda(Term) :-
441
+ compound(Term),
442
+ compound_name_arguments(Term, Name, Args),
443
+ is_lambda(Name, Args).
444
+
445
+ is_lambda(>>, [Params,Lambda|_]) :-
446
+ is_lamdba_params(Params),
447
+ is_callable(Lambda).
448
+ is_lambda(/, [Free,Lambda|_]) :-
449
+ is_lambda_free(Free),
450
+ is_callable(Lambda).
451
+
452
+ is_lamdba_params(Var) :-
453
+ var(Var), !, fail.
454
+ is_lamdba_params(Free/Params) :-
455
+ !,
456
+ is_lambda_free(Free),
457
+ is_list(Params).
458
+ is_lamdba_params(Params) :-
459
+ is_list(Params).
460
+
461
+ is_lambda_free(Free) :-
462
+ nonvar(Free), !, (Free = {_} -> true ; Free == {}).
463
+
464
+ is_callable(Term) :-
465
+ strip_module(Term, _, Goal),
466
+ callable(Goal).
467
+
468
+
469
+ %! lambda_calls(+LambdaExpression, -Goal) is det.
470
+ %! lambda_calls(+LambdaExpression, +ExtraArgs, -Goal) is det.
471
+ %
472
+ % Goal is the goal called if call/N is applied to
473
+ % LambdaExpression, where ExtraArgs are the additional arguments
474
+ % to call/N. ExtraArgs can be an integer or a list of concrete
475
+ % arguments. This predicate is used for cross-referencing and code
476
+ % highlighting.
477
+
478
+ lambda_calls(LambdaExtended, Goal) :-
479
+ compound(LambdaExtended),
480
+ compound_name_arguments(LambdaExtended, Name, [A1,A2|Extra]),
481
+ lambda_functor(Name),
482
+ compound_name_arguments(Lambda, Name, [A1,A2]),
483
+ lambda_calls(Lambda, Extra, Goal).
484
+
485
+ lambda_calls(Lambda, Extra, Goal) :-
486
+ integer(Extra),
487
+ !,
488
+ length(ExtraVars, Extra),
489
+ lambda_calls_(Lambda, ExtraVars, Goal).
490
+ lambda_calls(Lambda, Extra, Goal) :-
491
+ must_be(list, Extra),
492
+ lambda_calls_(Lambda, Extra, Goal).
493
+
494
+ lambda_calls_(Params>>Lambda, Args, Goal) :-
495
+ unify_lambda_parameters(Params, Args, ExtraArgs, Lambda, LambdaCopy),
496
+ extend(LambdaCopy, ExtraArgs, Goal).
497
+ lambda_calls_(Free/Lambda, ExtraArgs, Goal) :-
498
+ copy_term_nat(Free+Lambda, Free+LambdaCopy),
499
+ extend(LambdaCopy, ExtraArgs, Goal).
500
+
501
+ extend(Var, _, _) :-
502
+ var(Var),
503
+ !,
504
+ instantiation_error(Var).
505
+ extend(Cyclic, _, _) :-
506
+ cyclic_term(Cyclic),
507
+ !,
508
+ type_error(acyclic_term, Cyclic).
509
+ extend(M:Goal0, Extra, M:Goal) :-
510
+ !,
511
+ extend(Goal0, Extra, Goal).
512
+ extend(Goal0, Extra, Goal) :-
513
+ atom(Goal0),
514
+ !,
515
+ Goal =.. [Goal0|Extra].
516
+ extend(Goal0, Extra, Goal) :-
517
+ compound(Goal0),
518
+ !,
519
+ compound_name_arguments(Goal0, Name, Args0),
520
+ append(Args0, Extra, Args),
521
+ compound_name_arguments(Goal, Name, Args).
522
+
523
+
524
+ /*******************************
525
+ * SYNTAX HIGHLIGHTING *
526
+ *******************************/
527
+
528
+ :- multifile prolog_colour:goal_colours/2.
529
+
530
+ yall_colours(Lambda, built_in-[classify,body(Goal)|ArgSpecs]) :-
531
+ catch(lambda_calls(Lambda, Goal), _, fail),
532
+ Lambda =.. [>>,_,_|Args],
533
+ classify_extra(Args, ArgSpecs).
534
+
535
+ classify_extra([], []).
536
+ classify_extra([_|T0], [classify|T]) :-
537
+ classify_extra(T0, T).
538
+
539
+ prolog_colour:goal_colours(Goal, Spec) :-
540
+ lambda_like(Goal),
541
+ yall_colours(Goal, Spec).
542
+
543
+
544
+ /*******************************
545
+ * XREF SUPPORT *
546
+ *******************************/
547
+
548
+ :- multifile prolog:called_by/4.
549
+
550
+ prolog:called_by(Lambda, yall, _, [Goal]) :-
551
+ lambda_like(Lambda),
552
+ catch(lambda_calls(Lambda, Goal), _, fail).
553
+
554
+
555
+ /*******************************
556
+ * SANDBOX SUPPORT *
557
+ *******************************/
558
+
559
+ :- multifile
560
+ sandbox:safe_meta_predicate/1,
561
+ sandbox:safe_meta/2.
562
+
563
+ sandbox:safe_meta_predicate(yall:(/)/2).
564
+ sandbox:safe_meta_predicate(yall:(/)/3).
565
+ sandbox:safe_meta_predicate(yall:(/)/4).
566
+ sandbox:safe_meta_predicate(yall:(/)/5).
567
+ sandbox:safe_meta_predicate(yall:(/)/6).
568
+ sandbox:safe_meta_predicate(yall:(/)/7).
569
+
570
+ sandbox:safe_meta(yall:Lambda, [Goal]) :-
571
+ compound(Lambda),
572
+ compound_name_arity(Lambda, >>, Arity),
573
+ Arity >= 2,
574
+ lambda_calls(Lambda, Goal).