🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.prolog
Article #2630

Re: Prolog control structures

#2630
From: schaefer
Date: Fri, 03 Apr 1987 19:10
29 lines
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!schaefer
References: <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