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,644 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: R.A.O'Keefe, Vitor Santos Costa, Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 1984-2023, VU University Amsterdam
7
+ CWI, Amsterdam
8
+ SWI-Prolog Solutions .b.v
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(ugraphs,
38
+ [ add_edges/3, % +Graph, +Edges, -NewGraph
39
+ add_vertices/3, % +Graph, +Vertices, -NewGraph
40
+ complement/2, % +Graph, -NewGraph
41
+ compose/3, % +LeftGraph, +RightGraph, -NewGraph
42
+ del_edges/3, % +Graph, +Edges, -NewGraph
43
+ del_vertices/3, % +Graph, +Vertices, -NewGraph
44
+ edges/2, % +Graph, -Edges
45
+ neighbors/3, % +Vertex, +Graph, -Vertices
46
+ neighbours/3, % +Vertex, +Graph, -Vertices
47
+ reachable/3, % +Vertex, +Graph, -Vertices
48
+ top_sort/2, % +Graph, -Sort
49
+ ugraph_layers/2, % +Graph, -Layers
50
+ transitive_closure/2, % +Graph, -Closure
51
+ transpose_ugraph/2, % +Graph, -NewGraph
52
+ vertices/2, % +Graph, -Vertices
53
+ vertices_edges_to_ugraph/3, % +Vertices, +Edges, -Graph
54
+ ugraph_union/3, % +Graph1, +Graph2, -Graph
55
+ connect_ugraph/3 % +Graph1, -Start, -Graph
56
+ ]).
57
+
58
+ /** <module> Graph manipulation library
59
+
60
+ The S-representation of a graph is a list of (vertex-neighbours) pairs,
61
+ where the pairs are in standard order (as produced by keysort) and the
62
+ neighbours of each vertex are also in standard order (as produced by
63
+ sort). This form is convenient for many calculations.
64
+
65
+ A new UGraph from raw data can be created using
66
+ vertices_edges_to_ugraph/3.
67
+
68
+ Adapted to support some of the functionality of the SICStus ugraphs
69
+ library by Vitor Santos Costa.
70
+
71
+ Ported from YAP 5.0.1 to SWI-Prolog by Jan Wielemaker.
72
+
73
+ @author R.A.O'Keefe
74
+ @author Vitor Santos Costa
75
+ @author Jan Wielemaker
76
+ @license BSD-2 or Artistic 2.0
77
+ */
78
+
79
+ :- autoload(library(lists),[append/3]).
80
+ :- autoload(library(ordsets),
81
+ [ord_subtract/3,ord_union/3,ord_add_element/3,ord_union/4]).
82
+ :- autoload(library(error), [instantiation_error/1]).
83
+
84
+ %! vertices(+Graph, -Vertices)
85
+ %
86
+ % Unify Vertices with all vertices appearing in Graph. Example:
87
+ %
88
+ % ?- vertices([1-[3,5],2-[4],3-[],4-[5],5-[]], L).
89
+ % L = [1, 2, 3, 4, 5]
90
+
91
+ vertices([], []) :- !.
92
+ vertices([Vertex-_|Graph], [Vertex|Vertices]) :-
93
+ vertices(Graph, Vertices).
94
+
95
+
96
+ %! vertices_edges_to_ugraph(+Vertices:list, +Edges:pairs, -UGraph) is det.
97
+ %
98
+ % Create a UGraph from Vertices and Edges. UGraph must unify with the
99
+ % corresponding S-representation. Note that vertices that do not
100
+ % appear in any of the Edges appear in UGraph as `Vertice-[]`. The set
101
+ % of vertices in UGraph is the union of Vertices and all vertices that
102
+ % appear in the Edges pairs.
103
+ %
104
+ % ```
105
+ % ?- vertices_edges_to_ugraph([],[1-3,2-4,4-5,1-5], L).
106
+ % L = [1-[3,5], 2-[4], 3-[], 4-[5], 5-[]]
107
+ % ```
108
+ %
109
+ % In this case all vertices are defined implicitly. The next example
110
+ % shows three unconnected vertices:
111
+ %
112
+ % ```
113
+ % ?- vertices_edges_to_ugraph([1,2,6,7,8],[1-3,2-4,4-5,1-5], L).
114
+ % L = [1-[3,5], 2-[4], 3-[], 4-[5], 5-[], 6-[], 7-[], 8-[]]
115
+ % ```
116
+
117
+ vertices_edges_to_ugraph(Vertices, Edges, Graph) :-
118
+ sort(Edges, EdgeSet),
119
+ p_to_s_vertices(EdgeSet, IVertexBag),
120
+ append(Vertices, IVertexBag, VertexBag),
121
+ sort(VertexBag, VertexSet),
122
+ p_to_s_group(VertexSet, EdgeSet, Graph).
123
+
124
+
125
+ %! add_vertices(+Graph, +Vertices, -NewGraph)
126
+ %
127
+ % Unify NewGraph with a new graph obtained by adding the list of
128
+ % Vertices to Graph. Example:
129
+ %
130
+ % ```
131
+ % ?- add_vertices([1-[3,5],2-[]], [0,1,2,9], NG).
132
+ % NG = [0-[], 1-[3,5], 2-[], 9-[]]
133
+ % ```
134
+
135
+ add_vertices(Graph, Vertices, NewGraph) :-
136
+ msort(Vertices, V1),
137
+ add_vertices_to_s_graph(V1, Graph, NewGraph).
138
+
139
+ add_vertices_to_s_graph(L, [], NL) :-
140
+ !,
141
+ add_empty_vertices(L, NL).
142
+ add_vertices_to_s_graph([], L, L) :- !.
143
+ add_vertices_to_s_graph([V1|VL], [V-Edges|G], NGL) :-
144
+ compare(Res, V1, V),
145
+ add_vertices_to_s_graph(Res, V1, VL, V, Edges, G, NGL).
146
+
147
+ add_vertices_to_s_graph(=, _, VL, V, Edges, G, [V-Edges|NGL]) :-
148
+ add_vertices_to_s_graph(VL, G, NGL).
149
+ add_vertices_to_s_graph(<, V1, VL, V, Edges, G, [V1-[]|NGL]) :-
150
+ add_vertices_to_s_graph(VL, [V-Edges|G], NGL).
151
+ add_vertices_to_s_graph(>, V1, VL, V, Edges, G, [V-Edges|NGL]) :-
152
+ add_vertices_to_s_graph([V1|VL], G, NGL).
153
+
154
+ add_empty_vertices([], []).
155
+ add_empty_vertices([V|G], [V-[]|NG]) :-
156
+ add_empty_vertices(G, NG).
157
+
158
+ %! del_vertices(+Graph, +Vertices, -NewGraph) is det.
159
+ %
160
+ % Unify NewGraph with a new graph obtained by deleting the list of
161
+ % Vertices and all the edges that start from or go to a vertex in
162
+ % Vertices to the Graph. Example:
163
+ %
164
+ % ==
165
+ % ?- del_vertices([1-[3,5],2-[4],3-[],4-[5],5-[],6-[],7-[2,6],8-[]],
166
+ % [2,1],
167
+ % NL).
168
+ % NL = [3-[],4-[5],5-[],6-[],7-[6],8-[]]
169
+ % ==
170
+ %
171
+ % @compat Upto 5.6.48 the argument order was (+Vertices, +Graph,
172
+ % -NewGraph). Both YAP and SWI-Prolog have changed the argument
173
+ % order for compatibility with recent SICStus as well as
174
+ % consistency with del_edges/3.
175
+
176
+ del_vertices(Graph, Vertices, NewGraph) :-
177
+ sort(Vertices, V1), % JW: was msort
178
+ ( V1 = []
179
+ -> Graph = NewGraph
180
+ ; del_vertices(Graph, V1, V1, NewGraph)
181
+ ).
182
+
183
+ del_vertices(G, [], V1, NG) :-
184
+ !,
185
+ del_remaining_edges_for_vertices(G, V1, NG).
186
+ del_vertices([], _, _, []).
187
+ del_vertices([V-Edges|G], [V0|Vs], V1, NG) :-
188
+ compare(Res, V, V0),
189
+ split_on_del_vertices(Res, V,Edges, [V0|Vs], NVs, V1, NG, NGr),
190
+ del_vertices(G, NVs, V1, NGr).
191
+
192
+ del_remaining_edges_for_vertices([], _, []).
193
+ del_remaining_edges_for_vertices([V0-Edges|G], V1, [V0-NEdges|NG]) :-
194
+ ord_subtract(Edges, V1, NEdges),
195
+ del_remaining_edges_for_vertices(G, V1, NG).
196
+
197
+ split_on_del_vertices(<, V, Edges, Vs, Vs, V1, [V-NEdges|NG], NG) :-
198
+ ord_subtract(Edges, V1, NEdges).
199
+ split_on_del_vertices(>, V, Edges, [_|Vs], Vs, V1, [V-NEdges|NG], NG) :-
200
+ ord_subtract(Edges, V1, NEdges).
201
+ split_on_del_vertices(=, _, _, [_|Vs], Vs, _, NG, NG).
202
+
203
+ %! add_edges(+Graph, +Edges, -NewGraph)
204
+ %
205
+ % Unify NewGraph with a new graph obtained by adding the list of Edges
206
+ % to Graph. Example:
207
+ %
208
+ % ```
209
+ % ?- add_edges([1-[3,5],2-[4],3-[],4-[5],
210
+ % 5-[],6-[],7-[],8-[]],
211
+ % [1-6,2-3,3-2,5-7,3-2,4-5],
212
+ % NL).
213
+ % NL = [1-[3,5,6], 2-[3,4], 3-[2], 4-[5],
214
+ % 5-[7], 6-[], 7-[], 8-[]]
215
+ % ```
216
+
217
+ add_edges(Graph, Edges, NewGraph) :-
218
+ p_to_s_graph(Edges, G1),
219
+ ugraph_union(Graph, G1, NewGraph).
220
+
221
+ %! ugraph_union(+Graph1, +Graph2, -NewGraph)
222
+ %
223
+ % NewGraph is the union of Graph1 and Graph2. Example:
224
+ %
225
+ % ```
226
+ % ?- ugraph_union([1-[2],2-[3]],[2-[4],3-[1,2,4]],L).
227
+ % L = [1-[2], 2-[3,4], 3-[1,2,4]]
228
+ % ```
229
+
230
+ ugraph_union(Set1, [], Set1) :- !.
231
+ ugraph_union([], Set2, Set2) :- !.
232
+ ugraph_union([Head1-E1|Tail1], [Head2-E2|Tail2], Union) :-
233
+ compare(Order, Head1, Head2),
234
+ ugraph_union(Order, Head1-E1, Tail1, Head2-E2, Tail2, Union).
235
+
236
+ ugraph_union(=, Head-E1, Tail1, _-E2, Tail2, [Head-Es|Union]) :-
237
+ ord_union(E1, E2, Es),
238
+ ugraph_union(Tail1, Tail2, Union).
239
+ ugraph_union(<, Head1, Tail1, Head2, Tail2, [Head1|Union]) :-
240
+ ugraph_union(Tail1, [Head2|Tail2], Union).
241
+ ugraph_union(>, Head1, Tail1, Head2, Tail2, [Head2|Union]) :-
242
+ ugraph_union([Head1|Tail1], Tail2, Union).
243
+
244
+ %! del_edges(+Graph, +Edges, -NewGraph)
245
+ %
246
+ % Unify NewGraph with a new graph obtained by removing the list of
247
+ % Edges from Graph. Notice that no vertices are deleted. Example:
248
+ %
249
+ % ```
250
+ % ?- del_edges([1-[3,5],2-[4],3-[],4-[5],5-[],6-[],7-[],8-[]],
251
+ % [1-6,2-3,3-2,5-7,3-2,4-5,1-3],
252
+ % NL).
253
+ % NL = [1-[5],2-[4],3-[],4-[],5-[],6-[],7-[],8-[]]
254
+ % ```
255
+
256
+ del_edges(Graph, Edges, NewGraph) :-
257
+ p_to_s_graph(Edges, G1),
258
+ graph_subtract(Graph, G1, NewGraph).
259
+
260
+ %! graph_subtract(+Set1, +Set2, ?Difference)
261
+ %
262
+ % Is based on ord_subtract
263
+
264
+ graph_subtract(Set1, [], Set1) :- !.
265
+ graph_subtract([], _, []).
266
+ graph_subtract([Head1-E1|Tail1], [Head2-E2|Tail2], Difference) :-
267
+ compare(Order, Head1, Head2),
268
+ graph_subtract(Order, Head1-E1, Tail1, Head2-E2, Tail2, Difference).
269
+
270
+ graph_subtract(=, H-E1, Tail1, _-E2, Tail2, [H-E|Difference]) :-
271
+ ord_subtract(E1,E2,E),
272
+ graph_subtract(Tail1, Tail2, Difference).
273
+ graph_subtract(<, Head1, Tail1, Head2, Tail2, [Head1|Difference]) :-
274
+ graph_subtract(Tail1, [Head2|Tail2], Difference).
275
+ graph_subtract(>, Head1, Tail1, _, Tail2, Difference) :-
276
+ graph_subtract([Head1|Tail1], Tail2, Difference).
277
+
278
+ %! edges(+Graph, -Edges)
279
+ %
280
+ % Unify Edges with all edges appearing in Graph. Example:
281
+ %
282
+ % ?- edges([1-[3,5],2-[4],3-[],4-[5],5-[]], L).
283
+ % L = [1-3, 1-5, 2-4, 4-5]
284
+
285
+ edges(Graph, Edges) :-
286
+ s_to_p_graph(Graph, Edges).
287
+
288
+ p_to_s_graph(P_Graph, S_Graph) :-
289
+ sort(P_Graph, EdgeSet),
290
+ p_to_s_vertices(EdgeSet, VertexBag),
291
+ sort(VertexBag, VertexSet),
292
+ p_to_s_group(VertexSet, EdgeSet, S_Graph).
293
+
294
+
295
+ p_to_s_vertices([], []).
296
+ p_to_s_vertices([A-Z|Edges], [A,Z|Vertices]) :-
297
+ p_to_s_vertices(Edges, Vertices).
298
+
299
+
300
+ p_to_s_group([], _, []).
301
+ p_to_s_group([Vertex|Vertices], EdgeSet, [Vertex-Neibs|G]) :-
302
+ p_to_s_group(EdgeSet, Vertex, Neibs, RestEdges),
303
+ p_to_s_group(Vertices, RestEdges, G).
304
+
305
+
306
+ p_to_s_group([V1-X|Edges], V2, [X|Neibs], RestEdges) :- V1 == V2,
307
+ !,
308
+ p_to_s_group(Edges, V2, Neibs, RestEdges).
309
+ p_to_s_group(Edges, _, [], Edges).
310
+
311
+
312
+
313
+ s_to_p_graph([], []) :- !.
314
+ s_to_p_graph([Vertex-Neibs|G], P_Graph) :-
315
+ s_to_p_graph(Neibs, Vertex, P_Graph, Rest_P_Graph),
316
+ s_to_p_graph(G, Rest_P_Graph).
317
+
318
+
319
+ s_to_p_graph([], _, P_Graph, P_Graph) :- !.
320
+ s_to_p_graph([Neib|Neibs], Vertex, [Vertex-Neib|P], Rest_P) :-
321
+ s_to_p_graph(Neibs, Vertex, P, Rest_P).
322
+
323
+ %! transitive_closure(+Graph, -Closure)
324
+ %
325
+ % Generate the graph Closure as the transitive closure of Graph.
326
+ % Example:
327
+ %
328
+ % ```
329
+ % ?- transitive_closure([1-[2,3],2-[4,5],4-[6]],L).
330
+ % L = [1-[2,3,4,5,6], 2-[4,5,6], 4-[6]]
331
+ % ```
332
+
333
+ transitive_closure(Graph, Closure) :-
334
+ warshall(Graph, Graph, Closure).
335
+
336
+ warshall([], Closure, Closure) :- !.
337
+ warshall([V-_|G], E, Closure) :-
338
+ memberchk(V-Y, E), % Y := E(v)
339
+ warshall(E, V, Y, NewE),
340
+ warshall(G, NewE, Closure).
341
+
342
+
343
+ warshall([X-Neibs|G], V, Y, [X-NewNeibs|NewG]) :-
344
+ memberchk(V, Neibs),
345
+ !,
346
+ ord_union(Neibs, Y, NewNeibs),
347
+ warshall(G, V, Y, NewG).
348
+ warshall([X-Neibs|G], V, Y, [X-Neibs|NewG]) :-
349
+ !,
350
+ warshall(G, V, Y, NewG).
351
+ warshall([], _, _, []).
352
+
353
+ %! transpose_ugraph(Graph, NewGraph) is det.
354
+ %
355
+ % Unify NewGraph with a new graph obtained from Graph by replacing
356
+ % all edges of the form V1-V2 by edges of the form V2-V1. The cost
357
+ % is O(|V|*log(|V|)). Notice that an undirected graph is its own
358
+ % transpose. Example:
359
+ %
360
+ % ==
361
+ % ?- transpose([1-[3,5],2-[4],3-[],4-[5],
362
+ % 5-[],6-[],7-[],8-[]], NL).
363
+ % NL = [1-[],2-[],3-[1],4-[2],5-[1,4],6-[],7-[],8-[]]
364
+ % ==
365
+ %
366
+ % @compat This predicate used to be known as transpose/2.
367
+ % Following SICStus 4, we reserve transpose/2 for matrix
368
+ % transposition and renamed ugraph transposition to
369
+ % transpose_ugraph/2.
370
+
371
+ transpose_ugraph(Graph, NewGraph) :-
372
+ edges(Graph, Edges),
373
+ vertices(Graph, Vertices),
374
+ flip_edges(Edges, TransposedEdges),
375
+ vertices_edges_to_ugraph(Vertices, TransposedEdges, NewGraph).
376
+
377
+ flip_edges([], []).
378
+ flip_edges([Key-Val|Pairs], [Val-Key|Flipped]) :-
379
+ flip_edges(Pairs, Flipped).
380
+
381
+ %! compose(+LeftGraph, +RightGraph, -NewGraph)
382
+ %
383
+ % Compose NewGraph by connecting the _drains_ of LeftGraph to the
384
+ % _sources_ of RightGraph. Example:
385
+ %
386
+ % ?- compose([1-[2],2-[3]],[2-[4],3-[1,2,4]],L).
387
+ % L = [1-[4], 2-[1,2,4], 3-[]]
388
+
389
+ compose(G1, G2, Composition) :-
390
+ vertices(G1, V1),
391
+ vertices(G2, V2),
392
+ ord_union(V1, V2, V),
393
+ compose(V, G1, G2, Composition).
394
+
395
+ compose([], _, _, []) :- !.
396
+ compose([Vertex|Vertices], [Vertex-Neibs|G1], G2,
397
+ [Vertex-Comp|Composition]) :-
398
+ !,
399
+ compose1(Neibs, G2, [], Comp),
400
+ compose(Vertices, G1, G2, Composition).
401
+ compose([Vertex|Vertices], G1, G2, [Vertex-[]|Composition]) :-
402
+ compose(Vertices, G1, G2, Composition).
403
+
404
+
405
+ compose1([V1|Vs1], [V2-N2|G2], SoFar, Comp) :-
406
+ compare(Rel, V1, V2),
407
+ !,
408
+ compose1(Rel, V1, Vs1, V2, N2, G2, SoFar, Comp).
409
+ compose1(_, _, Comp, Comp).
410
+
411
+
412
+ compose1(<, _, Vs1, V2, N2, G2, SoFar, Comp) :-
413
+ !,
414
+ compose1(Vs1, [V2-N2|G2], SoFar, Comp).
415
+ compose1(>, V1, Vs1, _, _, G2, SoFar, Comp) :-
416
+ !,
417
+ compose1([V1|Vs1], G2, SoFar, Comp).
418
+ compose1(=, V1, Vs1, V1, N2, G2, SoFar, Comp) :-
419
+ ord_union(N2, SoFar, Next),
420
+ compose1(Vs1, G2, Next, Comp).
421
+
422
+ %! ugraph_layers(Graph, -Layers) is semidet.
423
+ %! top_sort(+Graph, -Sorted) is semidet.
424
+ %
425
+ % Sort vertices topologically. Layers is a list of lists of vertices
426
+ % where there are no edges from a layer to an earlier layer. The
427
+ % predicate top_sort/2 flattens the layers using append/2.
428
+ %
429
+ % These predicates fail if Graph is cyclic. If Graph is not connected,
430
+ % the sub-graphs are individually sorted, where the root of each
431
+ % subgraph is in the first layer, the nodes connected to the roots in
432
+ % the second, etc.
433
+ %
434
+ % ```
435
+ % ?- top_sort([1-[2], 2-[3], 3-[]], L).
436
+ % L = [1, 2, 3]
437
+ % ```
438
+ %
439
+ % @compat The original version of this library provided top_sort/3 as
440
+ % a _difference list_ version of top_sort/2. We removed this because
441
+ % the argument order was non-standard. Fixing causes hard to debug
442
+ % compatibility issues while we expect top_sort/3 was rarely used. A
443
+ % backward compatible top_sort/3 can be defined as
444
+ %
445
+ % ```
446
+ % top_sort(Graph, Tail, Sorted) :-
447
+ % top_sort(Graph, Sorted0),
448
+ % append(Sorted0, Tail, Sorted).
449
+ % ```
450
+ %
451
+ % The original version returned all vertices in a _layer_ in reverse
452
+ % order. The current one returns them in standard order of terms,
453
+ % i.e., each layer is an _ordered set_.
454
+ %
455
+ % @compat ugraph_layers/2 is a SWI-Prolog specific addition to this
456
+ % library.
457
+
458
+ top_sort(Graph, Sorted) :-
459
+ ugraph_layers(Graph, Layers),
460
+ append(Layers, Sorted).
461
+
462
+ ugraph_layers(Graph, Layers) :-
463
+ vertices_and_zeros(Graph, Vertices, Counts0),
464
+ count_edges(Graph, Vertices, Counts0, Counts1),
465
+ select_zeros(Counts1, Vertices, Zeros),
466
+ top_sort(Zeros, Layers, Graph, Vertices, Counts1).
467
+
468
+ vertices_and_zeros([], [], []) :- !.
469
+ vertices_and_zeros([Vertex-_|Graph], [Vertex|Vertices], [0|Zeros]) :-
470
+ vertices_and_zeros(Graph, Vertices, Zeros).
471
+
472
+ % Count the number of incomming edges for each vertex
473
+
474
+ count_edges([], _, Counts, Counts) :- !.
475
+ count_edges([_-Neibs|Graph], Vertices, Counts0, Counts2) :-
476
+ incr_list(Neibs, Vertices, Counts0, Counts1),
477
+ count_edges(Graph, Vertices, Counts1, Counts2).
478
+
479
+
480
+ incr_list([], _, Counts, Counts) :- !.
481
+ incr_list([V1|Neibs], [V2|Vertices], [M|Counts0], [N|Counts1]) :-
482
+ V1 == V2,
483
+ !,
484
+ N is M+1,
485
+ incr_list(Neibs, Vertices, Counts0, Counts1).
486
+ incr_list(Neibs, [_|Vertices], [N|Counts0], [N|Counts1]) :-
487
+ incr_list(Neibs, Vertices, Counts0, Counts1).
488
+
489
+ % get the vertices with 0 incoming edges, i.e., the origins.
490
+
491
+ select_zeros([], [], []) :- !.
492
+ select_zeros([0|Counts], [Vertex|Vertices], [Vertex|Zeros]) :-
493
+ !,
494
+ select_zeros(Counts, Vertices, Zeros).
495
+ select_zeros([_|Counts], [_|Vertices], Zeros) :-
496
+ select_zeros(Counts, Vertices, Zeros).
497
+
498
+ %! top_sort(+Zeros, -Layers, +Graph, +Vertices, +Counts) is semidet.
499
+
500
+ top_sort([], Layers, Graph, _, Counts) :-
501
+ !,
502
+ vertices_and_zeros(Graph, _, Counts), % verify nothing left
503
+ Layers = [].
504
+ top_sort(Zeros, [Zeros|Layers], Graph, Vertices, Counts1) :-
505
+ decr_zero_neighbors(Zeros, Graph, Vertices, Counts1, Counts2, NewZeros, []),
506
+ top_sort(NewZeros, Layers, Graph, Vertices, Counts2).
507
+
508
+ decr_zero_neighbors([], _, _, Counts, Counts, Z, Z).
509
+ decr_zero_neighbors([Zero|Zeros], Graph, Vertices, Counts0, Counts, Z0, Z) :-
510
+ graph_memberchk(Zero-Neibs, Graph),
511
+ decr_list(Neibs, Vertices, Counts0, Counts1, Z0, Z1),
512
+ decr_zero_neighbors(Zeros, Graph, Vertices, Counts1, Counts, Z1, Z).
513
+
514
+ graph_memberchk(Element1-Edges, [Element2-Edges2|_]) :-
515
+ Element1 == Element2,
516
+ !,
517
+ Edges = Edges2.
518
+ graph_memberchk(Element, [_|Rest]) :-
519
+ graph_memberchk(Element, Rest).
520
+
521
+ decr_list([], _, Counts, Counts, Zeros, Zeros) :-
522
+ !.
523
+ decr_list([V1|Neibs], [V2|Vertices], [N|Counts1], [M|Counts2], Z0, Z) :-
524
+ V1 == V2,
525
+ !,
526
+ M is N - 1,
527
+ ( M == 0
528
+ -> Z0 = [V1|Z1],
529
+ decr_list(Neibs, Vertices, Counts1, Counts2, Z1, Z)
530
+ ; decr_list(Neibs, Vertices, Counts1, Counts2, Z0, Z)
531
+ ).
532
+ decr_list(Neibs, [_|Vertices], [N|Counts1], [N|Counts2], Zi, Zo) :-
533
+ decr_list(Neibs, Vertices, Counts1, Counts2, Zi, Zo).
534
+
535
+
536
+ %! neighbors(+Vertex, +Graph, -Neigbours) is det.
537
+ %! neighbours(+Vertex, +Graph, -Neigbours) is det.
538
+ %
539
+ % Neigbours is a sorted list of the neighbours of Vertex in Graph.
540
+ % Example:
541
+ %
542
+ % ```
543
+ % ?- neighbours(4,[1-[3,5],2-[4],3-[],
544
+ % 4-[1,2,7,5],5-[],6-[],7-[],8-[]], NL).
545
+ % NL = [1,2,7,5]
546
+ % ```
547
+
548
+ neighbors(Vertex, Graph, Neig) :-
549
+ neighbours(Vertex, Graph, Neig).
550
+
551
+ neighbours(V,[V0-Neig|_],Neig) :-
552
+ V == V0,
553
+ !.
554
+ neighbours(V,[_|G],Neig) :-
555
+ neighbours(V,G,Neig).
556
+
557
+
558
+ %! connect_ugraph(+UGraphIn, -Start, -UGraphOut) is det.
559
+ %
560
+ % Adds Start as an additional vertex that is connected to all vertices
561
+ % in UGraphIn. This can be used to create an topological sort for a
562
+ % not connected graph. Start is before any vertex in UGraphIn in the
563
+ % standard order of terms. No vertex in UGraphIn can be a variable.
564
+ %
565
+ % Can be used to order a not-connected graph as follows:
566
+ %
567
+ % ```
568
+ % top_sort_unconnected(Graph, Vertices) :-
569
+ % ( top_sort(Graph, Vertices)
570
+ % -> true
571
+ % ; connect_ugraph(Graph, Start, Connected),
572
+ % top_sort(Connected, Ordered0),
573
+ % Ordered0 = [Start|Vertices]
574
+ % ).
575
+ % ```
576
+
577
+ connect_ugraph([], 0, []) :- !.
578
+ connect_ugraph(Graph, Start, [Start-Vertices|Graph]) :-
579
+ vertices(Graph, Vertices),
580
+ Vertices = [First|_],
581
+ before(First, Start).
582
+
583
+ %! before(+Term, -Before) is det.
584
+ %
585
+ % Unify Before to a term that comes before Term in the standard
586
+ % order of terms.
587
+ %
588
+ % @error instantiation_error if Term is unbound.
589
+
590
+ before(X, _) :-
591
+ var(X),
592
+ !,
593
+ instantiation_error(X).
594
+ before(Number, Start) :-
595
+ number(Number),
596
+ !,
597
+ Start is Number - 1.
598
+ before(_, 0).
599
+
600
+
601
+ %! complement(+UGraphIn, -UGraphOut)
602
+ %
603
+ % UGraphOut is a ugraph with an edge between all vertices that are
604
+ % _not_ connected in UGraphIn and all edges from UGraphIn removed.
605
+ % Example:
606
+ %
607
+ % ```
608
+ % ?- complement([1-[3,5],2-[4],3-[],
609
+ % 4-[1,2,7,5],5-[],6-[],7-[],8-[]], NL).
610
+ % NL = [1-[2,4,6,7,8],2-[1,3,5,6,7,8],3-[1,2,4,5,6,7,8],
611
+ % 4-[3,5,6,8],5-[1,2,3,4,6,7,8],6-[1,2,3,4,5,7,8],
612
+ % 7-[1,2,3,4,5,6,8],8-[1,2,3,4,5,6,7]]
613
+ % ```
614
+ %
615
+ % @tbd Simple two-step algorithm. You could be smarter, I suppose.
616
+
617
+ complement(G, NG) :-
618
+ vertices(G,Vs),
619
+ complement(G,Vs,NG).
620
+
621
+ complement([], _, []).
622
+ complement([V-Ns|G], Vs, [V-INs|NG]) :-
623
+ ord_add_element(Ns,V,Ns1),
624
+ ord_subtract(Vs,Ns1,INs),
625
+ complement(G, Vs, NG).
626
+
627
+ %! reachable(+Vertex, +UGraph, -Vertices)
628
+ %
629
+ % True when Vertices is an ordered set of vertices reachable in
630
+ % UGraph, including Vertex. Example:
631
+ %
632
+ % ?- reachable(1,[1-[3,5],2-[4],3-[],4-[5],5-[]],V).
633
+ % V = [1, 3, 5]
634
+
635
+ reachable(N, G, Rs) :-
636
+ reachable([N], G, [N], Rs).
637
+
638
+ reachable([], _, Rs, Rs).
639
+ reachable([N|Ns], G, Rs0, RsF) :-
640
+ neighbours(N, G, Nei),
641
+ ord_union(Rs0, Nei, Rs1, D),
642
+ append(Ns, D, Nsi),
643
+ reachable(Nsi, G, Rs1, RsF).
644
+
@@ -0,0 +1,6 @@
1
+ /* Creator: make/0
2
+
3
+ Purpose: Provide index for autoload
4
+ */
5
+
6
+ index(unicode_block(?,?,?), unicode_blocks, blocks).