From: Markus Triska Date: Thu, 30 Apr 2020 21:09:15 +0000 (+0200) Subject: enable goal expansion for CLP(ℤ) goals X-Git-Tag: v0.8.123~85^2^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=1dbadbfc3571cf777a67a02acac204c233f845ee;p=scryer-prolog.git enable goal expansion for CLP(ℤ) goals Example: integer_successor(I0, I) :- I #= I0 + 1. Yielding: ?- listing(integer_successor/2). integer_successor(A,B) :- ( integer(B) -> ( integer(A) -> B=:=A+1 ; C is B, clpz:clpz_equal(C,A+1) ) ; ( integer(A) -> ( var(B) -> B is A+1 ; C is A+1, clpz:clpz_equal(B,C) ) ; clpz:clpz_equal(B,A+1) ) ). Thus, fast low-level arithmetic is used whenever possible. --- diff --git a/src/prolog/lib/clpz.pl b/src/prolog/lib/clpz.pl index 0937d538..4725955b 100644 --- a/src/prolog/lib/clpz.pl +++ b/src/prolog/lib/clpz.pl @@ -3064,7 +3064,7 @@ is_false(var(X)) :- nonvar(X). :- dynamic(goal_expansion/1). -goal_expansion(Goal0, _Layout1, _Module, Goal, []) :- +user:goal_expansion(Goal0, Goal) :- \+ goal_expansion(false), clpz_expandable(Goal0), clpz_expansion(Goal0, Goal).