3 Part of CHR
(Constraint Handling Rules
)
5 Author
: Bart Demoen
, Tom Schrijvers
6 E
-mail
: Tom
.Schrijvers
@cs.kuleuven
.be
7 WWW
: http
://www
.swi
-prolog
.org
8 Copyright
(C
): 2003-2004, K
.U
. Leuven
10 This program is free software
; you can redistribute it
and/or
11 modify it under the terms of the GNU General Public License
12 as published by the Free Software Foundation
; either version
2
13 of the License
, or (at your option
) any later version
.
15 This program is distributed
in the hope that it will be useful
,
16 but WITHOUT ANY WARRANTY
; without even the implied warranty of
17 MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE
. See the
18 GNU General Public License
for more details
.
20 You should have received a copy of the GNU Lesser General Public
21 License along with this library
; if not, write to the Free Software
22 Foundation
, Inc
., 59 Temple Place
, Suite
330, Boston
, MA
02111-1307 USA
24 As a special exception
, if you
link this library with other files
,
25 compiled with a Free Software compiler
, to produce an executable
, this
26 library does
not by itself cause the resulting executable to be covered
27 by the GNU General Public License
. This exception does
not however
28 invalidate any other reasons why the executable file might be covered by
29 the GNU General Public License
.
34 find_with_var_identity
/4,
39 :- use_module
(library
(lists
)).
40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43 find_with_var_identity
(?
, +, :, -),
47 find_with_var_identity
(Template
, IdVars
, Goal
, Answers
) :-
49 copy_term_nat
(Template
-Key
-Goal
,TemplateC
-KeyC
-GoalC
),
50 findall
(KeyC
- TemplateC
, GoalC
, As
),
51 smash
(As
,Key
,Answers
).
54 smash
([Key
-T
|R
],Key
,[T
|NR
]) :- smash
(R
,Key
,NR
).
56 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 \
+ (member
(X
,L
), \
+ call
(G
)).
60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67 user
:goal_expansion
/2.
69 user
:goal_expansion
/2.
71 user
:goal_expansion
(forall
(Element
,List
,Test
), GoalOut
) :-
73 Test
=.. [Functor
,Arg
],
75 GoalOut
= once
(maplist
(Functor
,List
)).