Article View: comp.lang.prolog
Article #2630Re: Prolog control structures
From: schaefer
Date: Fri, 03 Apr 1987 19:10
Date: Fri, 03 Apr 1987 19:10
29 lines
1624 bytes
1624 bytes
In article <ecrcvax.275> mcvax!unido!ecrcvax!micha (Micha Meier) writes:
>[...]
>Not to forget the definition of succeeds/1:
> succeeds(X) :- not(not(X)).
>or alternatively
> succeeds(X) :- replace_vars(X, Y), Y, !.
>where replace_vars(X, Y) makes a copy of X with fresh variables.
>[...]
>--Micha
The replace_vars predicate can be implemented as:
replace_vars(X,Y) :- copy1(X,Y,T), !.
copy1(X,Y,Tbl) :- var(X), member((X,Y),Tbl).
copy1(X,X,Tbl) :- atomic(X).
copy1([H|T],[H1|T1],Tbl) :- copy1(H,H1,Tbl), copy1(T,T1,Tbl).
copy1((F,S),(F1,S1),Tbl) :- copy1(F,F1,Tbl), copy1(S,S1,Tbl).
copy1(X,Y,Tbl) :- not atomic(X), X =.. [F|R], copy1(R,R1,Tbl), Y =.. [F|R1].
member((X,Y),[(X1,Y)|R]) :- X == X1.
member(E,[E1|R]) :- var(E1), E1 = E.
member(E,[_|R]) :- member(E,R).
--
Bart Schaefer Dept. of CS&E
CSNET: schaefer@Oregon-Grad Oregon Graduate Center
UUCP: {ihnp4,seismo,sun}!verdix \ 19600 NW Von Neumann Dr
{hplabs,ucbvax,decvax}!tektronix !ogcvax!schaefer Beaverton, OR 97006
Technical Details
Message-ID:
<1239@ogcvax.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!water!watnot!watmath!clyde!rutgers!seismo!vrdxhq!verdix!ogcvax!schaeferReferences:
<topaz.10588> <ecrcvax.275>Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watnot!watmath!clyde!rutgers!seismo!vrdxhq!verdix!ogcvax!schaefer From: schaefer@ogcvax.UUCP Newsgroups: comp.lang.prolog Subject: Re: Prolog control structures Message-ID: <1239@ogcvax.UUCP> Date: Fri, 3-Apr-87 14:10:08 EST Article-I.D.: ogcvax.1239 Posted: Fri Apr 3 14:10:08 1987 Date-Received: Sun, 5-Apr-87 10:41:51 EST References: <topaz.10588> <ecrcvax.275> Reply-To: schaefer@ogcvax.UUCP (Barton E. Schaefer) Organization: Oregon Graduate Center, Beaverton, OR Lines: 29 Summary: Copy predicate