expand goals inside (\+)/1
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
!.
|
||||
|
||||
'$submit_query_and_print_results'(Term0, VarList) :-
|
||||
( expand_goal(Term0, Term) -> true
|
||||
( expand_goals(Term0, Term) -> true
|
||||
; Term0 = Term
|
||||
),
|
||||
( '$get_b_value'(B), call(Term), '$write_eqs_and_read_input'(B, VarList),
|
||||
@@ -235,26 +235,33 @@ use_module(Module, QualifiedExports) :-
|
||||
; throw(error(instantiation_error, use_module/2))
|
||||
).
|
||||
|
||||
|
||||
% expand goals in initialization directives.
|
||||
user:term_expansion(Term0, (:- initialization(ExpandedGoals))) :-
|
||||
nonvar(Term0),
|
||||
Term0 = (:- initialization(Goals)),
|
||||
expand_goals(Goals, ExpandedGoals).
|
||||
expand_goals(Goals, ExpandedGoals),
|
||||
Goals \== ExpandedGoals.
|
||||
|
||||
|
||||
module_expand_goal(UnexpandedGoals, ExpandedGoals) :-
|
||||
'$module_of'(Module, UnexpandedGoals),
|
||||
Module:goal_expansion(UnexpandedGoals, ExpandedGoals).
|
||||
'$module_expand_goal'(UnexpandedGoals, ExpandedGoals) :-
|
||||
( '$module_of'(Module, UnexpandedGoals),
|
||||
'$module_exists'(Module),
|
||||
Module:goal_expansion(UnexpandedGoals, ExpandedGoals),
|
||||
UnexpandedGoals \== ExpandedGoals ->
|
||||
true
|
||||
; user:goal_expansion(UnexpandedGoals, ExpandedGoals)
|
||||
).
|
||||
|
||||
expand_goals(UnexpandedGoals, ExpandedGoals) :-
|
||||
nonvar(UnexpandedGoals),
|
||||
var(ExpandedGoals),
|
||||
( expand_goal(UnexpandedGoals, Goals) ->
|
||||
( '$module_expand_goal'(UnexpandedGoals, Goals) ->
|
||||
true
|
||||
; Goals = UnexpandedGoals
|
||||
),
|
||||
( Goals = (Goal0, Goals0) ->
|
||||
( expand_goal(Goal0, Goal1) ->
|
||||
( expand_goals(Goal0, Goal1) ->
|
||||
expand_goals(Goals0, Goals1),
|
||||
thread_goals(Goal1, ExpandedGoals, Goals1, (','))
|
||||
; expand_goals(Goals0, Goals1),
|
||||
@@ -268,6 +275,9 @@ expand_goals(UnexpandedGoals, ExpandedGoals) :-
|
||||
expand_goals(Goals0, ExpandedGoals0),
|
||||
expand_goals(Goals1, ExpandedGoals1),
|
||||
ExpandedGoals = (ExpandedGoals0 ; ExpandedGoals1)
|
||||
; Goals = (\+ Goals0) ->
|
||||
expand_goals(Goals0, Goals1),
|
||||
ExpandedGoals = (\+ Goals1)
|
||||
; thread_goals(Goals, ExpandedGoals, (','))
|
||||
; Goals = ExpandedGoals
|
||||
).
|
||||
|
||||
Reference in New Issue
Block a user