Vispār es nezinu vai tas ir pareizais veids to tā darīt, bet parastā prologā arī var taisīt tādus trikus kādus manīju SICP grāmatā:
uber(append,[X|Y],Z,[X|W]) :- uber(append,Y,Z,W).
uber(append,[],X,X).
uber(reverse,[X|Y],Z) :- uber(reverse,Y,W), uber(append,W,[X],Z).
uber(reverse,[],[]).
uber(member,X,[X|R]).
uber(member,X,[Y|R]) :- uber(member,X,R).
pēc tam var vaicāt šādi:
?- uber(X,[a,b],[c,d],[a,b,c,d]).
X = append ;
false.
?- uber(X, b, [a,b,c]).
X = member ;
false.
?- uber(X, [a,b,c], [c,b,a]).
X = reverse ;
false.
|