我的谓词需要根据用户设置的模式比较变量。
例如:
p1([A,A,B,A],[1,1,5,1]).
true
p1([A,A,B,C],[1,1,1,5]).
false
p1([A,B,B,A,C],[2,3,3,2,1]).
true
等
目前,我的代码仅适用于2个变量。我不知道如何使整个过程递归。
isEqual(A,A).
pattern([A],X):-isEqual(A,X).
pattern([A,A],X):-isEqual(A,A),isEqual(X,[N1,N2]),isEqual(N1,N2).
pattern([A,B],X):-isEqual(X,[N1,N2]),not(isEqual(N1,N2)),A\==B.
答案 0 :(得分:1)
此谓词本质上是不纯的。 似乎打算使模式中的所有变量都不同。
pattern_instance(Varpattern, Instance) :-
term_variables(Varpattern, Vs),
\+ \+ ( Varpattern = Instance, alldifferent(Vs) ).
alldifferent([]).
alldifferent([X|Xs]) :-
maplist(dif(X), Xs),
alldifferent(Xs).