B-Prolog 6.7

Version of implementation B-Prolog of programming language Prolog

A version of B-Prolog, released on March 31, 2005.

Changes:

  • Changed hashtables to be dynamic, with automatic size expansions once the number of elements is double the size of the bucket.
  • Compiler uses modes to generate more specialized programs. A predicate may be indexed on multiple arguments if mode is given.
  • Introduction of a new directive “:-eager_consume F/N” which informs the system to use the eager consumption strategy for the predicate “F/N”. For tabled predicates that contain cuts or that reside in the scopes of cuts, the eager strategy should be used.
  • Speed improvement of the tabling system.
  • Macros expansion at compile time. A predicate is treated as a macro if it is cut-free and contains only one clause. This optimization can be suppressed by setting the flag “macro_expansion” to “off”.
  • Modified to support large memory address spaces used in Linux systems such as RedHad Enterprise.
  • Performance improvement of arithmetic equality (#=) and disequality (#>=) constraints (more than 10% speed-up over B-Prolog 6.6).
  • Significant speed-up (more than 3 times faster than version 6.6) for CNF-form Boolean constraints (Conjunctive Normal Form, i.e., L1 #/…#/Ln #= 1).
  • Change of the definition of Vars :: D to represent sparse domains more efficiently.
  • New event types “generated” and “bound(X)” are introduced. The event type “mimmax(X)” is obsolete now.
  • Debugger enables debugging of tabled predicates and action rules.
  • A watermark is used to check if garbage collection is needed. Garbage collection is invoked each time the top of the heap hits the watermark.
  • An unquoted file name like abc.txt in consult or compile is converted into quoted one automatically.
  • More frequent check of control-c during execution.
  • Bug fix in dynamic clauses that occurred with RedHat Linux.
  • Bug fix in unify_with_occurs_check/2.
  • All exceptions thrown by a user program are caught by the system if not caught by the user program.