Jekejeke Prolog 1.4.1 (Eager Tabling)
Jan Burse, created Nov 12. 2019
We just uploaded a new release of Jekejeke Prolog. The following major improvements are provided:
- Disjunction Inlining: The inlining is now complete so that the control constructs (;)/2, (',')/2, etc.. don't need any meta predicates implementations anymore. Disjunction is not anymore flattened.
- Module "sequence": There are new predicates distinct/2 and order_by/2. The predicate distinct/2 is eager and uses variant based equality. The predicate order_by/2 is lazy and uses variant based comparison. So for the later we are not compatible with SWI-Prolog which uses msort/2.
- Module "tabling": Predicates that use comparison have been streamlined and now feature a sort option. The aggregate predicates and tabling directive also recognize an eager/1 option. Eager tabling permits potentially infinite results. An example directive might read:
:- table fib/2 as [type(hash),eager(true)].
We conducted various experiments with fixpoint iteration for our tabling, but defer it until our Prolog system provides delimited continuations via shift/reset. Similarly tabling is not yet parallel since certain locking primitives are not yet provided.