Ann: SWI-Prolog 8.1.8

Dear SWI-Prolog user,

Version 8.1.8 is ready for download. Almost all the development is
related to tabling. First three important patches that are not related
to tabling:

  • Updated the end-point for the package manager to use HTTPS. See
    Www.swi-prolog.org goes https
    for making pack_install/1 and friends work with older versions.
  • Keri Harris found and fixed a long standing bug in clause garbage collection
    that could lead to crashes.
  • A bug in deep indexing for clauses could result in a clause having a variable
    for an argument that was selected to create a deep index to be ignored.

Tabling highlights:

  • Allow table/1 to be called as a goal instead of only as a
    directive. Added untable/1 to remove tabling for a predicate.
  • Several fixes and enhancements to the trie implementation.
  • Fixed several memory leaks.
  • Several fixes for answer completion, the last step dealing
    with well founded semantics for the case that simplification
    doesn’t solve the puzzle.
  • Removed several sources of poor tabling performance (non-linear
    behavior in some of the low-level operations).
  • Added a partial implementation for subsumptive tabling. See
    manual.
  • Added highlight support for the more complex tabling directives
    (PceEmacs, SWISH (requires current git version of SWISH)).

SWI-Prolog can now solve all problems from OpenRuleBench, although
some with very poor performance. This should improve in the near future.

Enjoy --- Jan

SWI-Prolog Changelog since version 8.1.7

  • ADDED: PceEmacs: extend library(prolog_colour) to deal with all
    tabling declarations.

  • DOC: subsumptive tabling.

  • XSB: Pass on as subsumptive.

  • ADDED: subsumptive tabling.

  • ADDED: Support tabling options using :- table PI as Option, ...

  • TEST: Started library(wfs) tests.

  • FIXED: tnot/1: correctly handle imported predicates and raise an
    error if the called predicate is not tabled.

  • ADDED: tabled to predicate flags

  • FIXED: Module qualification for residual programs.

  • FIXED: call_delays/2.

  • ENHANCED: Avoid repetitive merge of clusters.

  • ENHANCED: Speedup merging small SCCs into a large one.

  • FIXED: Use https to contact the pack server.

  • FIXED: do not delete lingering clauses indexes unless they are known
    to have been lingering at the time clause GC started

  • ADDED: extended statistics for tries.

  • ENHANCED: Use POPN sequences for reduce memory usage and speedup of
    right-recursive terms in tries.

  • ENHANCED: Avoid POP for outermost trie element.

  • ENHANCED: limit search for trie_gen/3. Starts creating choice points
    from the first in the trie or target term.

  • FIXED: WFS: produce proper residual program for positive delay
    elements.

  • FIXED: combination of deep indexing and clauses with a variable at
    the location of the deep index may loose answers.

  • FIXED: Undefined and simplification admin to make lazy AC really work.

  • FIXED: Lazy version should also avoid recursive AC

  • ENHANCED: Allow switching between eager and lazy AC. Default is
    eager as lazy still seems to suffer from bugs.

  • ENHANCED: Remove answer clusters from worklists when completing

  • ENHANCED: Working on #ifdef O_AC_EAGER to switch between eager and
    lazy answer completion.

  • ENHANCED: More aggressive marking of tables as answer completed.

  • FIXED: Issue#478: is_lambda/1 failed on valid yall lambda
    expressions. Fix by Paulo Moura.

  • ENHANCED: Avoid quadratic behaviour on deep tnot/1 negation chains.

  • FIXED: Memory leaks in tabling: reclaim variant skeletons and answer
    delay info

  • ENHANCED: Avoid popping worklists with no work.

  • FIXED: Trie statistics, notably on the tabling the variant trie

  • FIXED: Enumerating tries that have NULL values (deleted nodes that
    have not been pruned).

  • ENHANCED: rewrite trie unify_key as a switch

  • FIXED: trie_gen/2,3: instantiated indirect (float,string) that match
    still caused failure.

  • DOC: updated table/1 docs and added untable/1.

  • ADDED: untable/1

  • FIXED: abolish_table_subgoals/1 failed if no tabling has been done
    in the calling thread.

  • ADDED: dynamic invocation of table/1

Package xpce

  • FIXED: Issue#464: gxref/0: ignore files that do not exist.
    Paulo Moura.
1 Like