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.
- package/README.md +29 -0
- package/bin/swipl +0 -0
- package/bin/swipl-win +0 -0
- package/build-manifest.json +70 -0
- package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
- package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
- package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
- package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
- package/lib/swipl/ABI +1 -0
- package/lib/swipl/LICENSE +41 -0
- package/lib/swipl/README.md +116 -0
- package/lib/swipl/app/README.md +25 -0
- package/lib/swipl/app/app.pl +87 -0
- package/lib/swipl/app/pack.pl +350 -0
- package/lib/swipl/app/qlf.pl +521 -0
- package/lib/swipl/app/splfr.pl +177 -0
- package/lib/swipl/app/sys.pl +310 -0
- package/lib/swipl/bin/swipl.home +1 -0
- package/lib/swipl/boot/apply.pl +73 -0
- package/lib/swipl/boot/attvar.pl +344 -0
- package/lib/swipl/boot/autoload.pl +1226 -0
- package/lib/swipl/boot/bags.pl +283 -0
- package/lib/swipl/boot/dcg.pl +388 -0
- package/lib/swipl/boot/dicts.pl +193 -0
- package/lib/swipl/boot/dwim.pl +485 -0
- package/lib/swipl/boot/engines.pl +152 -0
- package/lib/swipl/boot/expand.pl +1628 -0
- package/lib/swipl/boot/gc.pl +65 -0
- package/lib/swipl/boot/history.pl +304 -0
- package/lib/swipl/boot/init.pl +4682 -0
- package/lib/swipl/boot/iri.pl +64 -0
- package/lib/swipl/boot/license.pl +390 -0
- package/lib/swipl/boot/load.pl +81 -0
- package/lib/swipl/boot/messages.pl +2521 -0
- package/lib/swipl/boot/packs.pl +306 -0
- package/lib/swipl/boot/predopts.pl +154 -0
- package/lib/swipl/boot/qlf.pl +141 -0
- package/lib/swipl/boot/rc.pl +263 -0
- package/lib/swipl/boot/syspred.pl +1634 -0
- package/lib/swipl/boot/tabling.pl +2321 -0
- package/lib/swipl/boot/threads.pl +42 -0
- package/lib/swipl/boot/toplevel.pl +2248 -0
- package/lib/swipl/boot/topvars.pl +261 -0
- package/lib/swipl/boot.prc +0 -0
- package/lib/swipl/cmake/swipl.cmake +131 -0
- package/lib/swipl/customize/README.md +23 -0
- package/lib/swipl/customize/edit +101 -0
- package/lib/swipl/customize/init.pl +164 -0
- package/lib/swipl/demo/README.md +33 -0
- package/lib/swipl/demo/likes.pl +44 -0
- package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
- package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
- package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
- package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
- package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
- package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
- package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
- package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
- package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
- package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
- package/lib/swipl/doc/packages/examples/http/README.md +98 -0
- package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
- package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
- package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
- package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
- package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
- package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
- package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
- package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
- package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
- package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
- package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
- package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
- package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
- package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
- package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
- package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
- package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
- package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
- package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
- package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
- package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
- package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
- package/lib/swipl/include/SWI-Prolog.h +1544 -0
- package/lib/swipl/include/SWI-Stream.h +537 -0
- package/lib/swipl/include/Yap/YapInterface.h +283 -0
- package/lib/swipl/include/sicstus/sicstus.h +452 -0
- package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
- package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
- package/lib/swipl/lib/x86_64-linux/files.so +0 -0
- package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
- package/lib/swipl/lib/x86_64-linux/json.so +0 -0
- package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
- package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
- package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
- package/lib/swipl/lib/x86_64-linux/process.so +0 -0
- package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
- package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
- package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
- package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
- package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
- package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
- package/lib/swipl/lib/x86_64-linux/time.so +0 -0
- package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
- package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
- package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
- package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
- package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
- package/lib/swipl/library/INDEX.pl +1020 -0
- package/lib/swipl/library/aggregate.pl +755 -0
- package/lib/swipl/library/ansi_term.pl +653 -0
- package/lib/swipl/library/apply.pl +426 -0
- package/lib/swipl/library/apply_macros.pl +497 -0
- package/lib/swipl/library/arithmetic.pl +320 -0
- package/lib/swipl/library/assoc.pl +522 -0
- package/lib/swipl/library/atom.pl +169 -0
- package/lib/swipl/library/backcomp.pl +688 -0
- package/lib/swipl/library/base32.pl +291 -0
- package/lib/swipl/library/base64.pl +441 -0
- package/lib/swipl/library/broadcast.pl +161 -0
- package/lib/swipl/library/build/cmake.pl +137 -0
- package/lib/swipl/library/build/conan.pl +232 -0
- package/lib/swipl/library/build/make.pl +168 -0
- package/lib/swipl/library/build/tools.pl +825 -0
- package/lib/swipl/library/charsio.pl +195 -0
- package/lib/swipl/library/check.pl +1097 -0
- package/lib/swipl/library/check_installation.pl +912 -0
- package/lib/swipl/library/clp/INDEX.pl +157 -0
- package/lib/swipl/library/clp/bounds.pl +2036 -0
- package/lib/swipl/library/clp/clp_distinct.pl +263 -0
- package/lib/swipl/library/clp/clp_events.pl +92 -0
- package/lib/swipl/library/clp/clpb.pl +1896 -0
- package/lib/swipl/library/clp/clpfd.pl +7906 -0
- package/lib/swipl/library/clp/simplex.pl +1580 -0
- package/lib/swipl/library/codesio.pl +182 -0
- package/lib/swipl/library/coinduction.pl +183 -0
- package/lib/swipl/library/console_input.pl +289 -0
- package/lib/swipl/library/csv.pl +611 -0
- package/lib/swipl/library/ctypes.pl +161 -0
- package/lib/swipl/library/date.pl +370 -0
- package/lib/swipl/library/dcg/INDEX.pl +35 -0
- package/lib/swipl/library/dcg/basics.pl +514 -0
- package/lib/swipl/library/dcg/high_order.pl +227 -0
- package/lib/swipl/library/debug.pl +499 -0
- package/lib/swipl/library/dialect/bim.pl +186 -0
- package/lib/swipl/library/dialect/commons.pl +77 -0
- package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
- package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
- package/lib/swipl/library/dialect/hprolog.pl +314 -0
- package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
- package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
- package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
- package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
- package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
- package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
- package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
- package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
- package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
- package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
- package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
- package/lib/swipl/library/dialect/sicstus.pl +582 -0
- package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
- package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
- package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
- package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
- package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
- package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
- package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
- package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
- package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
- package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
- package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
- package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
- package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
- package/lib/swipl/library/dialect/sicstus4.pl +200 -0
- package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
- package/lib/swipl/library/dialect/xsb/README.md +20 -0
- package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
- package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
- package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
- package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
- package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
- package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
- package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
- package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
- package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
- package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
- package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
- package/lib/swipl/library/dialect/xsb/source.pl +308 -0
- package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
- package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
- package/lib/swipl/library/dialect/xsb/string.pl +76 -0
- package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
- package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
- package/lib/swipl/library/dialect/xsb.pl +688 -0
- package/lib/swipl/library/dialect/yap/README.TXT +8 -0
- package/lib/swipl/library/dialect/yap.pl +283 -0
- package/lib/swipl/library/dialect.pl +123 -0
- package/lib/swipl/library/dicts.pl +399 -0
- package/lib/swipl/library/dif.pl +426 -0
- package/lib/swipl/library/edinburgh.pl +138 -0
- package/lib/swipl/library/edit.pl +783 -0
- package/lib/swipl/library/error.pl +495 -0
- package/lib/swipl/library/exceptions.pl +231 -0
- package/lib/swipl/library/explain.pl +543 -0
- package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
- package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
- package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
- package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
- package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
- package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
- package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
- package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
- package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
- package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
- package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
- package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
- package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
- package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
- package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
- package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
- package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
- package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
- package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
- package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
- package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
- package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
- package/lib/swipl/library/ext/chr/chr.pl +686 -0
- package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
- package/lib/swipl/library/ext/clib/cgi.pl +86 -0
- package/lib/swipl/library/ext/clib/crypt.pl +44 -0
- package/lib/swipl/library/ext/clib/filesex.pl +644 -0
- package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
- package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
- package/lib/swipl/library/ext/clib/md5.pl +68 -0
- package/lib/swipl/library/ext/clib/memfile.pl +61 -0
- package/lib/swipl/library/ext/clib/process.pl +573 -0
- package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
- package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
- package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
- package/lib/swipl/library/ext/clib/sched.pl +85 -0
- package/lib/swipl/library/ext/clib/sha.pl +162 -0
- package/lib/swipl/library/ext/clib/socket.pl +1102 -0
- package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
- package/lib/swipl/library/ext/clib/streampool.pl +136 -0
- package/lib/swipl/library/ext/clib/syslog.pl +180 -0
- package/lib/swipl/library/ext/clib/time.pl +194 -0
- package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
- package/lib/swipl/library/ext/clib/uid.pl +220 -0
- package/lib/swipl/library/ext/clib/unix.pl +317 -0
- package/lib/swipl/library/ext/clib/uri.pl +530 -0
- package/lib/swipl/library/ext/clib/uuid.pl +207 -0
- package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
- package/lib/swipl/library/ext/http/http/README.md +34 -0
- package/lib/swipl/library/ext/http/http/ax.pl +189 -0
- package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
- package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
- package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
- package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
- package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
- package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
- package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
- package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
- package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
- package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
- package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
- package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
- package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
- package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
- package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
- package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
- package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
- package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
- package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
- package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
- package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
- package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
- package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
- package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
- package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
- package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
- package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
- package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
- package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
- package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
- package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
- package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
- package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
- package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
- package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
- package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
- package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
- package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
- package/lib/swipl/library/ext/http/http/hub.pl +600 -0
- package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
- package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
- package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
- package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
- package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
- package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
- package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
- package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
- package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
- package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
- package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
- package/lib/swipl/library/ext/json/INDEX.pl +36 -0
- package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
- package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
- package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
- package/lib/swipl/library/ext/json/http/json.pl +48 -0
- package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
- package/lib/swipl/library/ext/json/json.pl +1215 -0
- package/lib/swipl/library/ext/json/json_convert.pl +681 -0
- package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
- package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
- package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
- package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
- package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
- package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
- package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
- package/lib/swipl/library/ext/nlp/isub.pl +162 -0
- package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
- package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
- package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
- package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
- package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
- package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
- package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
- package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
- package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
- package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
- package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
- package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
- package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
- package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
- package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
- package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
- package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
- package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
- package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
- package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
- package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
- package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
- package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
- package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
- package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
- package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
- package/lib/swipl/library/ext/ssl/saml.pl +609 -0
- package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
- package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
- package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
- package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
- package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
- package/lib/swipl/library/fastrw.pl +105 -0
- package/lib/swipl/library/files.pl +80 -0
- package/lib/swipl/library/gensym.pl +111 -0
- package/lib/swipl/library/git.pl +1027 -0
- package/lib/swipl/library/hashtable.pl +365 -0
- package/lib/swipl/library/heaps.pl +252 -0
- package/lib/swipl/library/hotfix.pl +239 -0
- package/lib/swipl/library/http/jquery.pl +103 -0
- package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
- package/lib/swipl/library/increval.pl +217 -0
- package/lib/swipl/library/intercept.pl +263 -0
- package/lib/swipl/library/iostream.pl +237 -0
- package/lib/swipl/library/iri_scheme/file.pl +70 -0
- package/lib/swipl/library/lazy_lists.pl +481 -0
- package/lib/swipl/library/listing.pl +1362 -0
- package/lib/swipl/library/lists.pl +860 -0
- package/lib/swipl/library/lynx/INDEX.pl +14 -0
- package/lib/swipl/library/lynx/format.pl +380 -0
- package/lib/swipl/library/lynx/html_style.pl +129 -0
- package/lib/swipl/library/lynx/html_text.pl +865 -0
- package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
- package/lib/swipl/library/macros.pl +451 -0
- package/lib/swipl/library/main.pl +1200 -0
- package/lib/swipl/library/make.pl +197 -0
- package/lib/swipl/library/modules.pl +129 -0
- package/lib/swipl/library/nb_rbtrees.pl +267 -0
- package/lib/swipl/library/nb_set.pl +203 -0
- package/lib/swipl/library/obfuscate.pl +115 -0
- package/lib/swipl/library/occurs.pl +241 -0
- package/lib/swipl/library/operators.pl +182 -0
- package/lib/swipl/library/option.pl +388 -0
- package/lib/swipl/library/optparse.pl +966 -0
- package/lib/swipl/library/ordsets.pl +518 -0
- package/lib/swipl/library/oset.pl +160 -0
- package/lib/swipl/library/pairs.pl +187 -0
- package/lib/swipl/library/persistency.pl +713 -0
- package/lib/swipl/library/pio.pl +47 -0
- package/lib/swipl/library/portray_text.pl +277 -0
- package/lib/swipl/library/pprint.pl +940 -0
- package/lib/swipl/library/predicate_options.pl +975 -0
- package/lib/swipl/library/prolog_autoload.pl +233 -0
- package/lib/swipl/library/prolog_breakpoints.pl +396 -0
- package/lib/swipl/library/prolog_clause.pl +1104 -0
- package/lib/swipl/library/prolog_code.pl +416 -0
- package/lib/swipl/library/prolog_codewalk.pl +1248 -0
- package/lib/swipl/library/prolog_colour.pl +3301 -0
- package/lib/swipl/library/prolog_colour.qlf +0 -0
- package/lib/swipl/library/prolog_config.pl +154 -0
- package/lib/swipl/library/prolog_coverage.pl +1333 -0
- package/lib/swipl/library/prolog_debug.pl +404 -0
- package/lib/swipl/library/prolog_deps.pl +675 -0
- package/lib/swipl/library/prolog_evaluable.pl +234 -0
- package/lib/swipl/library/prolog_format.pl +219 -0
- package/lib/swipl/library/prolog_history.pl +161 -0
- package/lib/swipl/library/prolog_jiti.pl +333 -0
- package/lib/swipl/library/prolog_locale.pl +61 -0
- package/lib/swipl/library/prolog_metainference.pl +307 -0
- package/lib/swipl/library/prolog_pack.pl +3906 -0
- package/lib/swipl/library/prolog_profile.pl +346 -0
- package/lib/swipl/library/prolog_qlfmake.pl +533 -0
- package/lib/swipl/library/prolog_source.pl +1188 -0
- package/lib/swipl/library/prolog_stack.pl +794 -0
- package/lib/swipl/library/prolog_trace.pl +365 -0
- package/lib/swipl/library/prolog_versions.pl +347 -0
- package/lib/swipl/library/prolog_wrap.pl +164 -0
- package/lib/swipl/library/prolog_xref.pl +3090 -0
- package/lib/swipl/library/prolog_xref.qlf +0 -0
- package/lib/swipl/library/pure_input.pl +266 -0
- package/lib/swipl/library/qpforeign.pl +695 -0
- package/lib/swipl/library/qsave.pl +1516 -0
- package/lib/swipl/library/quasi_quotations.pl +300 -0
- package/lib/swipl/library/quintus.pl +437 -0
- package/lib/swipl/library/random.pl +459 -0
- package/lib/swipl/library/rbtrees.pl +1153 -0
- package/lib/swipl/library/readln.pl +256 -0
- package/lib/swipl/library/readutil.pl +304 -0
- package/lib/swipl/library/record.pl +544 -0
- package/lib/swipl/library/rwlocks.pl +172 -0
- package/lib/swipl/library/sandbox.pl +1384 -0
- package/lib/swipl/library/semweb/dc.rdfs +198 -0
- package/lib/swipl/library/semweb/eor.rdfs +95 -0
- package/lib/swipl/library/semweb/owl.owl +287 -0
- package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
- package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
- package/lib/swipl/library/settings.pl +755 -0
- package/lib/swipl/library/shell.pl +462 -0
- package/lib/swipl/library/shlib.pl +670 -0
- package/lib/swipl/library/solution_sequences.pl +439 -0
- package/lib/swipl/library/sort.pl +119 -0
- package/lib/swipl/library/statistics.pl +541 -0
- package/lib/swipl/library/streams.pl +118 -0
- package/lib/swipl/library/strings.pl +469 -0
- package/lib/swipl/library/system.pl +95 -0
- package/lib/swipl/library/tables.pl +381 -0
- package/lib/swipl/library/tableutil.pl +771 -0
- package/lib/swipl/library/tabling.pl +42 -0
- package/lib/swipl/library/terms.pl +457 -0
- package/lib/swipl/library/theme/auto.pl +61 -0
- package/lib/swipl/library/theme/dark.pl +455 -0
- package/lib/swipl/library/theme/light.pl +45 -0
- package/lib/swipl/library/thread.pl +810 -0
- package/lib/swipl/library/thread_pool.pl +508 -0
- package/lib/swipl/library/threadutil.pl +574 -0
- package/lib/swipl/library/tty.pl +316 -0
- package/lib/swipl/library/ugraphs.pl +644 -0
- package/lib/swipl/library/unicode/INDEX.pl +6 -0
- package/lib/swipl/library/unicode/blocks.pl +414 -0
- package/lib/swipl/library/url.pl +1129 -0
- package/lib/swipl/library/utf8.pl +145 -0
- package/lib/swipl/library/varnumbers.pl +221 -0
- package/lib/swipl/library/vm.pl +251 -0
- package/lib/swipl/library/wfs.pl +205 -0
- package/lib/swipl/library/when.pl +263 -0
- package/lib/swipl/library/writef.pl +278 -0
- package/lib/swipl/library/www_browser.pl +251 -0
- package/lib/swipl/library/yall.pl +574 -0
- package/lib/swipl/library/zip.pl +211 -0
- package/lib/swipl/swipl.home +1 -0
- package/lib/vendor/libcrypto.so.3 +0 -0
- package/lib/vendor/libpcre2-8.so.0 +0 -0
- package/lib/vendor/libssl.so.3 +0 -0
- package/lib/vendor/libz.so.1 +0 -0
- package/licenses/OpenSSL-LICENSE.txt +177 -0
- package/licenses/PCRE2-COPYING +5 -0
- package/licenses/README.md +12 -0
- package/licenses/SWI-Prolog-LICENSE +41 -0
- package/licenses/zlib-LICENSE +22 -0
- package/package.json +27 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Jan Wielemaker
|
|
4
|
+
E-mail: J.Wielemaker@vu.nl
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2020, VU University Amsterdam
|
|
7
|
+
CWI, Amsterdam
|
|
8
|
+
All rights reserved.
|
|
9
|
+
|
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
|
11
|
+
modification, are permitted provided that the following conditions
|
|
12
|
+
are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright
|
|
15
|
+
notice, this list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
18
|
+
notice, this list of conditions and the following disclaimer in
|
|
19
|
+
the documentation and/or other materials provided with the
|
|
20
|
+
distribution.
|
|
21
|
+
|
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
25
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
26
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
27
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
28
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
29
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
30
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
31
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
32
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
33
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
:- module(hashtable,
|
|
37
|
+
[ ht_new/1, % --HT
|
|
38
|
+
ht_is_hashtable/1, % @HT
|
|
39
|
+
ht_size/2, % +HT, -Size
|
|
40
|
+
|
|
41
|
+
ht_put/3, % !HT, +Key, +Value
|
|
42
|
+
ht_update/4, % +HT, +Key, ?Old, +New
|
|
43
|
+
ht_put_new/3, % !HT, +Key, +Value
|
|
44
|
+
ht_put/5, % !HT, +Key, +Value, +IfNew, -Old
|
|
45
|
+
ht_del/3, % !HT, +Key, -Value
|
|
46
|
+
|
|
47
|
+
ht_get/3, % +HT, +Key, -Value
|
|
48
|
+
ht_gen/3, % +HT, ?Key, ?Value
|
|
49
|
+
ht_pairs/2, % ?HT, ?Pairs
|
|
50
|
+
ht_keys/2 % +HT, -Keys
|
|
51
|
+
]).
|
|
52
|
+
:- autoload(library(error), [must_be/2]).
|
|
53
|
+
|
|
54
|
+
/** <module> Hash tables
|
|
55
|
+
|
|
56
|
+
Hash tables are one of the many key-value representations available to
|
|
57
|
+
SWI-Prolog.
|
|
58
|
+
|
|
59
|
+
This module implements a hash table as a _mutable_ and _backtrackable_
|
|
60
|
+
data structure. The hash table is implemented as a _closed hash table_,
|
|
61
|
+
where the _buckets_ array is implemented using an unbounded arity
|
|
62
|
+
compound term. Elements in this array are manipulated using setarg/3.
|
|
63
|
+
|
|
64
|
+
Hash tables allow for any Prolog data types as keys or values, except
|
|
65
|
+
that the key cannot be a variable. Applications that require a plain
|
|
66
|
+
variable as key can do so by wrapping all keys in a compound, e.g.,
|
|
67
|
+
k(Var).
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
71
|
+
Data structure
|
|
72
|
+
|
|
73
|
+
ht(Load, Size, Table)
|
|
74
|
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
75
|
+
|
|
76
|
+
%! ht_new(--HT)
|
|
77
|
+
%
|
|
78
|
+
% Create a new hash table.
|
|
79
|
+
|
|
80
|
+
ht_new(ht(0,0,[](_))).
|
|
81
|
+
|
|
82
|
+
%! ht_is_hashtable(@HT) is semidet.
|
|
83
|
+
%
|
|
84
|
+
% True when HT is a hash table.
|
|
85
|
+
|
|
86
|
+
ht_is_hashtable(HT) :-
|
|
87
|
+
nonvar(HT),
|
|
88
|
+
HT = ht(Load, Size, Buckets),
|
|
89
|
+
integer(Load),
|
|
90
|
+
integer(Size),
|
|
91
|
+
compound_name_arity(Buckets, [], Arity),
|
|
92
|
+
Arity =:= Size*2+1.
|
|
93
|
+
|
|
94
|
+
%! ht_size(+HT, -Count) is det.
|
|
95
|
+
%
|
|
96
|
+
% True when Size is the number of key-value pairs in HT.
|
|
97
|
+
|
|
98
|
+
ht_size(ht(Count, _Size, _Buckets), Count).
|
|
99
|
+
|
|
100
|
+
%! ht_put(!HT, +Key, +Value) is det.
|
|
101
|
+
%
|
|
102
|
+
% Add a Key-Value to HT. The binding is undone on backtracking.
|
|
103
|
+
|
|
104
|
+
ht_put(HT, Key, Value) :-
|
|
105
|
+
must_be(nonvar, Key),
|
|
106
|
+
ht_put(HT, Key, Value, _, _, _).
|
|
107
|
+
|
|
108
|
+
%! ht_put_new(!HT, +Key, +Value) is semidet.
|
|
109
|
+
%
|
|
110
|
+
% As ht_put/3, but fails if Key is already in HT instead of updating
|
|
111
|
+
% the associated value.
|
|
112
|
+
|
|
113
|
+
ht_put_new(HT, Key, Value) :-
|
|
114
|
+
must_be(nonvar, Key),
|
|
115
|
+
ht_put(HT, Key, Value, _, _, true).
|
|
116
|
+
|
|
117
|
+
%! ht_update(+HT, +Key, ?Old, +New) is semidet.
|
|
118
|
+
%
|
|
119
|
+
% True when HT holds Key-Old before and Key-New after this call. Note
|
|
120
|
+
% that it is possible to update to a variable and the instantiate
|
|
121
|
+
% this. For example, a word-count update could be implemented as:
|
|
122
|
+
%
|
|
123
|
+
% ```
|
|
124
|
+
% update_word_count(HT, Word) :-
|
|
125
|
+
% ( ht_update(HT, Word, Old, New)
|
|
126
|
+
% -> New is Old+1
|
|
127
|
+
% ; ht_put(HT, Word, 1)
|
|
128
|
+
% ).
|
|
129
|
+
% ```
|
|
130
|
+
|
|
131
|
+
ht_update(HT, Key, Old, New) :-
|
|
132
|
+
must_be(nonvar, Key),
|
|
133
|
+
ht_put(HT, Key, New, _, Old, false).
|
|
134
|
+
|
|
135
|
+
%! ht_put(!HT, +Key, +Value, +IfNew, -Old) is det.
|
|
136
|
+
%
|
|
137
|
+
% Add Key-Value to HT. Old is unified with the old value associated
|
|
138
|
+
% with Key or, if Key is new, with IfNew. This can be used to
|
|
139
|
+
% bootstrap managing a list of values, e.g.
|
|
140
|
+
%
|
|
141
|
+
% ht_put_list(HT, Key, Value) :-
|
|
142
|
+
% ht_put(HT, Key, [Value|Tail], [], Tail).
|
|
143
|
+
|
|
144
|
+
ht_put(HT, Key, Value, IfNew, Old) :-
|
|
145
|
+
must_be(nonvar, Key),
|
|
146
|
+
ht_put(HT, Key, Value, IfNew, Old, _).
|
|
147
|
+
|
|
148
|
+
ht_put(HT, Key, Value, IfNew, Old, IsNew) :-
|
|
149
|
+
HT = ht(Load, Size, Buckets),
|
|
150
|
+
( Load >= Size//2
|
|
151
|
+
-> ht_resize(HT),
|
|
152
|
+
ht_put(HT, Key, Value, IfNew, Old, IsNew)
|
|
153
|
+
; variant_hash(Key, I0),
|
|
154
|
+
I is I0 mod Size,
|
|
155
|
+
put_(Buckets, I, Size, Key, Old, IfNew, Value, IsNew),
|
|
156
|
+
( IsNew == true
|
|
157
|
+
-> Load2 is Load+1,
|
|
158
|
+
setarg(1, HT, Load2)
|
|
159
|
+
; true
|
|
160
|
+
)
|
|
161
|
+
).
|
|
162
|
+
|
|
163
|
+
put_(Buckets, I, Size, Key, Old, IfNew, Value, IsNew) :-
|
|
164
|
+
ht_kv(Buckets, I, K, V),
|
|
165
|
+
( var(K)
|
|
166
|
+
-> IsNew = true,
|
|
167
|
+
Old = IfNew,
|
|
168
|
+
K = Key,
|
|
169
|
+
V = Value
|
|
170
|
+
; K == Key
|
|
171
|
+
-> IsNew = false,
|
|
172
|
+
Old = V,
|
|
173
|
+
ht_put_v(Buckets, I, Value)
|
|
174
|
+
; I2 is (I+1) mod Size,
|
|
175
|
+
put_(Buckets, I2, Size, Key, Old, IfNew, Value, IsNew)
|
|
176
|
+
).
|
|
177
|
+
|
|
178
|
+
ht_resize(HT) :-
|
|
179
|
+
HT = ht(_Load, Size, Buckets),
|
|
180
|
+
NewSize is max(4, Size*2),
|
|
181
|
+
NewArity is NewSize*2+1,
|
|
182
|
+
compound_name_arity(NewBuckets, [], NewArity),
|
|
183
|
+
copy_members(0, Size, Buckets, NewSize, NewBuckets),
|
|
184
|
+
setarg(2, HT, NewSize),
|
|
185
|
+
setarg(3, HT, NewBuckets).
|
|
186
|
+
|
|
187
|
+
copy_members(I, OSize, OBuckets, NSize, NBuckets) :-
|
|
188
|
+
I < OSize,
|
|
189
|
+
!,
|
|
190
|
+
ht_kv(OBuckets, I, K, V),
|
|
191
|
+
( nonvar(K)
|
|
192
|
+
-> variant_hash(K, I0),
|
|
193
|
+
NI is I0 mod NSize,
|
|
194
|
+
copy_(NBuckets, NI, NSize, K, V)
|
|
195
|
+
; true
|
|
196
|
+
),
|
|
197
|
+
I2 is I+1,
|
|
198
|
+
copy_members(I2, OSize, OBuckets, NSize, NBuckets).
|
|
199
|
+
copy_members(_, _, _, _, _).
|
|
200
|
+
|
|
201
|
+
copy_(Buckets, I, Size, Key, Value) :-
|
|
202
|
+
ht_kv(Buckets, I, K, V),
|
|
203
|
+
( var(K)
|
|
204
|
+
-> K = Key,
|
|
205
|
+
V = Value
|
|
206
|
+
; I2 is (I+1) mod Size,
|
|
207
|
+
copy_(Buckets, I2, Size, Key, Value)
|
|
208
|
+
).
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
%! ht_del(!HT, +Key, -Value) is semidet.
|
|
212
|
+
%
|
|
213
|
+
% Delete Key-Value from HT. Fails if Key does not appear in HT or
|
|
214
|
+
% Value does not unify with the old associated value.
|
|
215
|
+
|
|
216
|
+
ht_del(HT, Key, Value) :-
|
|
217
|
+
must_be(nonvar, Key),
|
|
218
|
+
HT = ht(Load, Size, Buckets),
|
|
219
|
+
Load > 0,
|
|
220
|
+
variant_hash(Key, I0),
|
|
221
|
+
I is I0 mod Size,
|
|
222
|
+
del_(Buckets, I, Size, Key, Value),
|
|
223
|
+
Load2 is Load - 1,
|
|
224
|
+
setarg(1, HT, Load2).
|
|
225
|
+
|
|
226
|
+
del_(Buckets, I, Size, Key, Value) :-
|
|
227
|
+
ht_kv(Buckets, I, K, V),
|
|
228
|
+
( var(K)
|
|
229
|
+
-> fail
|
|
230
|
+
; K == Key
|
|
231
|
+
-> V = Value,
|
|
232
|
+
ht_put_kv(Buckets, I, _, _),
|
|
233
|
+
del_shift(Buckets, I, I, Size)
|
|
234
|
+
; I2 is (I+1) mod Size,
|
|
235
|
+
del_(Buckets, I2, Size, Key, Value)
|
|
236
|
+
).
|
|
237
|
+
|
|
238
|
+
del_shift(Buckets, I0, J, Size) :-
|
|
239
|
+
I is (I0+1) mod Size,
|
|
240
|
+
ht_kv(Buckets, I, K, V),
|
|
241
|
+
( var(K)
|
|
242
|
+
-> true
|
|
243
|
+
; variant_hash(K, Hash),
|
|
244
|
+
R is Hash mod Size,
|
|
245
|
+
( ( I >= R, R > J
|
|
246
|
+
; R > J, J > I
|
|
247
|
+
; J > I, I >= R
|
|
248
|
+
)
|
|
249
|
+
-> del_shift(Buckets, I, J, Size)
|
|
250
|
+
; ht_put_kv(Buckets, J, K, V),
|
|
251
|
+
ht_put_kv(Buckets, I, _, _),
|
|
252
|
+
del_shift(Buckets, I, I, Size)
|
|
253
|
+
)
|
|
254
|
+
).
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
%! ht_get(+HT, +Key, -Value) is semidet.
|
|
258
|
+
%
|
|
259
|
+
% True when Key is in HT and associated with Value.
|
|
260
|
+
|
|
261
|
+
ht_get(ht(Load, Size, Buckets), Key, Value) :-
|
|
262
|
+
Load > 0,
|
|
263
|
+
must_be(nonvar, Key),
|
|
264
|
+
variant_hash(Key, I0),
|
|
265
|
+
I is I0 mod Size,
|
|
266
|
+
get_(Buckets, I, Size, Key, Value).
|
|
267
|
+
|
|
268
|
+
get_(Buckets, I, Size, Key, Value) :-
|
|
269
|
+
ht_kv(Buckets, I, K, V),
|
|
270
|
+
( Key == K
|
|
271
|
+
-> Value = V
|
|
272
|
+
; nonvar(K)
|
|
273
|
+
-> I2 is (I+1) mod Size,
|
|
274
|
+
get_(Buckets, I2, Size, Key, Value)
|
|
275
|
+
).
|
|
276
|
+
|
|
277
|
+
ht_k(Buckets, I, K) :-
|
|
278
|
+
IK is I*2+1,
|
|
279
|
+
arg(IK, Buckets, K).
|
|
280
|
+
|
|
281
|
+
ht_kv(Buckets, I, K, V) :-
|
|
282
|
+
IK is I*2+1,
|
|
283
|
+
IV is IK+1,
|
|
284
|
+
arg(IK, Buckets, K),
|
|
285
|
+
arg(IV, Buckets, V).
|
|
286
|
+
|
|
287
|
+
ht_put_kv(Buckets, I, K, V) :-
|
|
288
|
+
IK is I*2+1,
|
|
289
|
+
IV is IK+1,
|
|
290
|
+
setarg(IK, Buckets, K),
|
|
291
|
+
setarg(IV, Buckets, V).
|
|
292
|
+
|
|
293
|
+
ht_put_v(Buckets, I, V) :-
|
|
294
|
+
IV is I*2+2,
|
|
295
|
+
setarg(IV, Buckets, V).
|
|
296
|
+
|
|
297
|
+
%! ht_gen(+HT, ?Key, ?Value) is nondet.
|
|
298
|
+
%
|
|
299
|
+
% True when Key-Value is in HT. Pairs are enumerated on backtracking
|
|
300
|
+
% using the hash table order.
|
|
301
|
+
|
|
302
|
+
ht_gen(HT, Key, Value) :-
|
|
303
|
+
HT = ht(_, Size, Buckets),
|
|
304
|
+
End is Size - 1,
|
|
305
|
+
between(0, End, I),
|
|
306
|
+
ht_kv(Buckets, I, K, V),
|
|
307
|
+
nonvar(K),
|
|
308
|
+
K = Key,
|
|
309
|
+
V = Value.
|
|
310
|
+
|
|
311
|
+
%! ht_pairs(?HT, ?Pairs) is det.
|
|
312
|
+
%
|
|
313
|
+
% True when Pairs and HT represent the same association. When used in
|
|
314
|
+
% mode (+,-), Pairs is an ordered set.
|
|
315
|
+
|
|
316
|
+
ht_pairs(HT, Pairs) :-
|
|
317
|
+
ht_is_hashtable(HT),
|
|
318
|
+
!,
|
|
319
|
+
HT = ht(_Load, Size, Buckets),
|
|
320
|
+
pairs_(0, Size, Buckets, Pairs0),
|
|
321
|
+
sort(Pairs0, Pairs).
|
|
322
|
+
ht_pairs(HT, Pairs) :-
|
|
323
|
+
must_be(list(pair), Pairs),
|
|
324
|
+
ht_new(HT),
|
|
325
|
+
ht_fill(Pairs, HT).
|
|
326
|
+
|
|
327
|
+
pairs_(I, Size, Buckets, Pairs) :-
|
|
328
|
+
( I < Size
|
|
329
|
+
-> ht_kv(Buckets, I, K, V),
|
|
330
|
+
( nonvar(K)
|
|
331
|
+
-> Pairs = [K-V|T],
|
|
332
|
+
I2 is I+1,
|
|
333
|
+
pairs_(I2, Size, Buckets, T)
|
|
334
|
+
; I2 is I+1,
|
|
335
|
+
pairs_(I2, Size, Buckets, Pairs)
|
|
336
|
+
)
|
|
337
|
+
; Pairs = []
|
|
338
|
+
).
|
|
339
|
+
|
|
340
|
+
ht_fill([], _).
|
|
341
|
+
ht_fill([K-V|T], HT) :-
|
|
342
|
+
ht_put(HT, K, V),
|
|
343
|
+
ht_fill(T, HT).
|
|
344
|
+
|
|
345
|
+
%! ht_keys(+HT, -Keys) is det.
|
|
346
|
+
%
|
|
347
|
+
% True when Keys is an ordered set of all keys in HT.
|
|
348
|
+
|
|
349
|
+
ht_keys(HT, Keys) :-
|
|
350
|
+
HT = ht(_Load, Size, Buckets),
|
|
351
|
+
keys_(0, Size, Buckets, Keys0),
|
|
352
|
+
sort(Keys0, Keys).
|
|
353
|
+
|
|
354
|
+
keys_(I, Size, Buckets, Keys) :-
|
|
355
|
+
( I < Size
|
|
356
|
+
-> ht_k(Buckets, I, K),
|
|
357
|
+
( nonvar(K)
|
|
358
|
+
-> Keys = [K|T],
|
|
359
|
+
I2 is I+1,
|
|
360
|
+
keys_(I2, Size, Buckets, T)
|
|
361
|
+
; I2 is I+1,
|
|
362
|
+
keys_(I2, Size, Buckets, Keys)
|
|
363
|
+
)
|
|
364
|
+
; Keys = []
|
|
365
|
+
).
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/* Part of SWI-Prolog
|
|
2
|
+
|
|
3
|
+
Author: Lars Buitinck
|
|
4
|
+
E-mail: larsmans@gmail.com
|
|
5
|
+
WWW: http://www.swi-prolog.org
|
|
6
|
+
Copyright (c) 2006-2015, Lars Buitinck
|
|
7
|
+
All rights reserved.
|
|
8
|
+
|
|
9
|
+
Redistribution and use in source and binary forms, with or without
|
|
10
|
+
modification, are permitted provided that the following conditions
|
|
11
|
+
are met:
|
|
12
|
+
|
|
13
|
+
1. Redistributions of source code must retain the above copyright
|
|
14
|
+
notice, this list of conditions and the following disclaimer.
|
|
15
|
+
|
|
16
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
17
|
+
notice, this list of conditions and the following disclaimer in
|
|
18
|
+
the documentation and/or other materials provided with the
|
|
19
|
+
distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
24
|
+
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
25
|
+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
26
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
27
|
+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
28
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
29
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
30
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
31
|
+
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
32
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
:- module(heaps,
|
|
36
|
+
[ add_to_heap/4, % +Heap0, +Key, ?Value, -Heap
|
|
37
|
+
delete_from_heap/4, % +Heap0, -Key, +Value, -Heap
|
|
38
|
+
empty_heap/1, % +Heap
|
|
39
|
+
get_from_heap/4, % ?Heap0, ?Key, ?Value, -Heap
|
|
40
|
+
heap_size/2, % +Heap, -Size:int
|
|
41
|
+
heap_to_list/2, % +Heap, -List:list
|
|
42
|
+
is_heap/1, % +Term
|
|
43
|
+
list_to_heap/2, % +List:list, -Heap
|
|
44
|
+
merge_heaps/3, % +Heap0, +Heap1, -Heap
|
|
45
|
+
min_of_heap/3, % +Heap, ?Key, ?Value
|
|
46
|
+
min_of_heap/5, % +Heap, ?Key1, ?Value1,
|
|
47
|
+
% ?Key2, ?Value2
|
|
48
|
+
singleton_heap/3 % ?Heap, ?Key, ?Value
|
|
49
|
+
]).
|
|
50
|
+
|
|
51
|
+
/** <module> heaps/priority queues
|
|
52
|
+
*
|
|
53
|
+
* Heaps are data structures that return the entries inserted into them in an
|
|
54
|
+
* ordered fashion, based on a priority. This makes them the data structure of
|
|
55
|
+
* choice for implementing priority queues, a central element of algorithms such
|
|
56
|
+
* as best-first or A* search and Kruskal's minimum-spanning-tree algorithm.
|
|
57
|
+
*
|
|
58
|
+
* This module implements min-heaps, meaning that key-value items are retrieved in
|
|
59
|
+
* ascending order of key. In other words, the key determines the priority. It
|
|
60
|
+
* was designed to be compatible with the SICStus Prolog library module of the
|
|
61
|
+
* same name. merge_heaps/3 and singleton_heap/3 are SWI-specific extension. The
|
|
62
|
+
* portray_heap/1 predicate is not implemented.
|
|
63
|
+
*
|
|
64
|
+
* Although the values can be arbitrary Prolog terms, the keys determine the
|
|
65
|
+
* priority, so keys must be ordered by @=</2. This means that variables can be
|
|
66
|
+
* used as keys, but binding them in between heap operations may change the
|
|
67
|
+
* ordering. It also means that rational terms (cyclic trees), for which standard
|
|
68
|
+
* order is not well-defined, cannot be used as keys.
|
|
69
|
+
*
|
|
70
|
+
* The current version implements pairing heaps. These support insertion and
|
|
71
|
+
* merging both in constant time, deletion of the minimum in logarithmic amortized
|
|
72
|
+
* time (though delete-min, i.e., get_from_heap/3, takes linear time in the worst
|
|
73
|
+
* case).
|
|
74
|
+
*
|
|
75
|
+
* @author Lars Buitinck
|
|
76
|
+
*/
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* Heaps are represented as heap(H,Size) terms, where H is a pairing heap and
|
|
80
|
+
* Size is an integer. A pairing heap is either nil or a term
|
|
81
|
+
* t(X,PrioX,Sub) where Sub is a list of pairing heaps t(Y,PrioY,Sub) s.t.
|
|
82
|
+
* PrioX @< PrioY. See predicate is_heap/2, below.
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
%! add_to_heap(+Heap0, +Key, ?Value, -Heap) is semidet.
|
|
86
|
+
%
|
|
87
|
+
% Adds Value with priority Key to Heap0, constructing a new
|
|
88
|
+
% heap in Heap.
|
|
89
|
+
|
|
90
|
+
add_to_heap(heap(Q0,M),P,X,heap(Q1,N)) :-
|
|
91
|
+
meld(Q0,t(X,P,[]),Q1),
|
|
92
|
+
N is M+1.
|
|
93
|
+
|
|
94
|
+
%! delete_from_heap(+Heap0, -Key, +Value, -Heap) is semidet.
|
|
95
|
+
%
|
|
96
|
+
% Deletes Value from Heap0, leaving its priority in Key and the
|
|
97
|
+
% resulting data structure in Heap. Fails if Value is not found in
|
|
98
|
+
% Heap0.
|
|
99
|
+
%
|
|
100
|
+
% @bug This predicate is extremely inefficient and exists only for
|
|
101
|
+
% SICStus compatibility.
|
|
102
|
+
|
|
103
|
+
delete_from_heap(Q0,P,X,Q) :-
|
|
104
|
+
get_from_heap(Q0,P,X,Q),
|
|
105
|
+
!.
|
|
106
|
+
delete_from_heap(Q0,Px,X,Q) :-
|
|
107
|
+
get_from_heap(Q0,Py,Y,Q1),
|
|
108
|
+
delete_from_heap(Q1,Px,X,Q2),
|
|
109
|
+
add_to_heap(Q2,Py,Y,Q).
|
|
110
|
+
|
|
111
|
+
%! empty_heap(?Heap) is semidet.
|
|
112
|
+
%
|
|
113
|
+
% True if Heap is an empty heap. Complexity: constant.
|
|
114
|
+
|
|
115
|
+
empty_heap(heap(nil,0)).
|
|
116
|
+
|
|
117
|
+
%! singleton_heap(?Heap, ?Key, ?Value) is semidet.
|
|
118
|
+
%
|
|
119
|
+
% True if Heap is a heap with the single element Key-Value.
|
|
120
|
+
%
|
|
121
|
+
% Complexity: constant.
|
|
122
|
+
|
|
123
|
+
singleton_heap(heap(t(X,P,[]), 1), P, X).
|
|
124
|
+
|
|
125
|
+
%! get_from_heap(?Heap0, ?Key, ?Value, -Heap) is semidet.
|
|
126
|
+
%
|
|
127
|
+
% Retrieves the minimum-priority pair Key-Value from Heap0.
|
|
128
|
+
% Heap is Heap0 with that pair removed. Complexity: logarithmic
|
|
129
|
+
% (amortized), linear in the worst case.
|
|
130
|
+
|
|
131
|
+
get_from_heap(heap(t(X,P,Sub),M), P, X, heap(Q,N)) :-
|
|
132
|
+
pairing(Sub,Q),
|
|
133
|
+
N is M-1.
|
|
134
|
+
|
|
135
|
+
%! heap_size(+Heap, -Size:int) is det.
|
|
136
|
+
%
|
|
137
|
+
% Determines the number of elements in Heap. Complexity: constant.
|
|
138
|
+
|
|
139
|
+
heap_size(heap(_,N),N).
|
|
140
|
+
|
|
141
|
+
%! heap_to_list(+Heap, -List:list) is det.
|
|
142
|
+
%
|
|
143
|
+
% Constructs a list List of Key-Value terms, ordered by
|
|
144
|
+
% (ascending) priority. Complexity: O(N log N).
|
|
145
|
+
|
|
146
|
+
heap_to_list(Q,L) :-
|
|
147
|
+
to_list(Q,L).
|
|
148
|
+
to_list(heap(nil,0),[]) :- !.
|
|
149
|
+
to_list(Q0,[P-X|Xs]) :-
|
|
150
|
+
get_from_heap(Q0,P,X,Q),
|
|
151
|
+
heap_to_list(Q,Xs).
|
|
152
|
+
|
|
153
|
+
%! is_heap(+X) is semidet.
|
|
154
|
+
%
|
|
155
|
+
% Returns true if X is a heap. Validates the consistency of the
|
|
156
|
+
% entire heap. Complexity: linear.
|
|
157
|
+
|
|
158
|
+
is_heap(V) :-
|
|
159
|
+
var(V), !, fail.
|
|
160
|
+
is_heap(heap(Q,N)) :-
|
|
161
|
+
integer(N),
|
|
162
|
+
nonvar(Q),
|
|
163
|
+
( Q == nil
|
|
164
|
+
-> N == 0
|
|
165
|
+
; N > 0,
|
|
166
|
+
Q = t(_,MinP,Sub),
|
|
167
|
+
are_pairing_heaps(Sub, MinP)
|
|
168
|
+
).
|
|
169
|
+
|
|
170
|
+
% True iff 1st arg is a pairing heap with min key @=< 2nd arg,
|
|
171
|
+
% where min key of nil is logically @> any term.
|
|
172
|
+
is_pairing_heap(V, _) :-
|
|
173
|
+
var(V),
|
|
174
|
+
!,
|
|
175
|
+
fail.
|
|
176
|
+
is_pairing_heap(nil, _).
|
|
177
|
+
is_pairing_heap(t(_,P,Sub), MinP) :-
|
|
178
|
+
MinP @=< P,
|
|
179
|
+
are_pairing_heaps(Sub, P).
|
|
180
|
+
|
|
181
|
+
% True iff 1st arg is a list of pairing heaps, each with min key @=< 2nd arg.
|
|
182
|
+
are_pairing_heaps(V, _) :-
|
|
183
|
+
var(V),
|
|
184
|
+
!,
|
|
185
|
+
fail.
|
|
186
|
+
are_pairing_heaps([], _).
|
|
187
|
+
are_pairing_heaps([Q|Qs], MinP) :-
|
|
188
|
+
is_pairing_heap(Q, MinP),
|
|
189
|
+
are_pairing_heaps(Qs, MinP).
|
|
190
|
+
|
|
191
|
+
%! list_to_heap(+List:list, -Heap) is det.
|
|
192
|
+
%
|
|
193
|
+
% If List is a list of Key-Value terms, constructs a heap
|
|
194
|
+
% out of List. Complexity: linear.
|
|
195
|
+
|
|
196
|
+
list_to_heap(Xs,Q) :-
|
|
197
|
+
empty_heap(Empty),
|
|
198
|
+
list_to_heap(Xs,Empty,Q).
|
|
199
|
+
|
|
200
|
+
list_to_heap([],Q,Q).
|
|
201
|
+
list_to_heap([P-X|Xs],Q0,Q) :-
|
|
202
|
+
add_to_heap(Q0,P,X,Q1),
|
|
203
|
+
list_to_heap(Xs,Q1,Q).
|
|
204
|
+
|
|
205
|
+
%! min_of_heap(+Heap, ?Key, ?Value) is semidet.
|
|
206
|
+
%
|
|
207
|
+
% Unifies Value with the minimum-priority element of Heap and
|
|
208
|
+
% Key with its priority value. Complexity: constant.
|
|
209
|
+
|
|
210
|
+
min_of_heap(heap(t(X,P,_),_), P, X).
|
|
211
|
+
|
|
212
|
+
%! min_of_heap(+Heap, ?Key1, ?Value1, ?Key2, ?Value2) is semidet.
|
|
213
|
+
%
|
|
214
|
+
% Gets the two minimum-priority elements from Heap. Complexity: logarithmic
|
|
215
|
+
% (amortized).
|
|
216
|
+
%
|
|
217
|
+
% @bug This predicate is extremely inefficient and exists for compatibility
|
|
218
|
+
% with earlier implementations of this library and SICStus
|
|
219
|
+
% compatibility. It performs a linear amount of work in the worst case
|
|
220
|
+
% that a following get_from_heap has to re-do.
|
|
221
|
+
|
|
222
|
+
min_of_heap(Q,Px,X,Py,Y) :-
|
|
223
|
+
get_from_heap(Q,Px,X,Q0),
|
|
224
|
+
min_of_heap(Q0,Py,Y).
|
|
225
|
+
|
|
226
|
+
%! merge_heaps(+Heap0, +Heap1, -Heap) is det.
|
|
227
|
+
%
|
|
228
|
+
% Merge the two heaps Heap0 and Heap1 in Heap. Complexity: constant.
|
|
229
|
+
|
|
230
|
+
merge_heaps(heap(L,K),heap(R,M),heap(Q,N)) :-
|
|
231
|
+
meld(L,R,Q),
|
|
232
|
+
N is K+M.
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
% Merge two pairing heaps according to the pairing heap definition.
|
|
236
|
+
meld(nil,Q,Q) :- !.
|
|
237
|
+
meld(Q,nil,Q) :- !.
|
|
238
|
+
meld(L,R,Q) :-
|
|
239
|
+
L = t(X,Px,SubL),
|
|
240
|
+
R = t(Y,Py,SubR),
|
|
241
|
+
( Px @< Py
|
|
242
|
+
-> Q = t(X,Px,[R|SubL])
|
|
243
|
+
; Q = t(Y,Py,[L|SubR])
|
|
244
|
+
).
|
|
245
|
+
|
|
246
|
+
% "Pair up" (recursively meld) a list of pairing heaps.
|
|
247
|
+
pairing([], nil).
|
|
248
|
+
pairing([Q], Q) :- !.
|
|
249
|
+
pairing([Q0,Q1|Qs], Q) :-
|
|
250
|
+
meld(Q0, Q1, Q2),
|
|
251
|
+
pairing(Qs, Q3),
|
|
252
|
+
meld(Q2, Q3, Q).
|