8. Shen Prolog
TBoS p.343-361, SD
Here are the member, reverse and append functions in Shen Prolog.
(defprolog member
X [X | _] <--;
X [_ | Y] <-- (member X Y);)
member
(defprolog rev
[] [] <--;
[X | Y] Z <-- (rev Y W) (conc W [X] Z);)
rev
(defprolog conc
[] X X <--;
[X | Y] Z [X | W] <-- (conc Y Z W);)
conc
(prolog? (member 1 [1 2]))
true
(prolog? (member 0 [1 2]))
false
(prolog? (member X [1 2]))
true
(prolog? (member X [1 2]) (return X))
1
(prolog? (rev [1 2] X) (return X))
[2 1]
|
|