如何按照用户定义的模式比较变量?

时间:2019-04-28 20:52:59

标签: prolog

我的谓词需要根据用户设置的模式比较变量。

例如:

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.

1 个答案:

答案 0 :(得分:1)

此谓词本质上是不纯的。 似乎打算使模式中的所有变量都不同。

pattern_instance(Varpattern, Instance) :-
   term_variables(Varpattern, Vs),
   \+ \+ ( Varpattern = Instance, alldifferent(Vs) ).

alldifferent([]).
alldifferent([X|Xs]) :-
   maplist(dif(X), Xs),
   alldifferent(Xs).