您应该订购这些套件,例如使用sort
. 当您这样做时,问题仍然存在,是否可以将 in 中的列表与 inOrdSet1
中的子序列统一起来OrdSet2
。这是直截了当的:
is_subseq([], _).
is_subseq([X|Xs], [X|Ys]) :- is_subseq(Xs, Ys).
is_subseq([X|Xs], [Y|Ys]) :- X \= Y, is_subseq([X|Xs], Ys).
当你有这个谓词时,你可以这样做:
?- S1 = [stone(X), active(X), stone(Y), in(app2,Y), unlocked(app2)],
| sort(S1, OrdS1),
| S2 = [stone(s1), active(s1), stone(s2), in(app2,s2), unlocked(app2)],
| sort(S2, OrdS2),
| is_subseq(OrdS1, OrdS2).
S1 = S2, S2 = [stone(s1), active(s1), stone(s2), in(app2, s2), unlocked(app2)],
X = s1,
Y = s2,
OrdS1 = OrdS2, OrdS2 = [active(s1), stone(s1), stone(s2), unlocked(app2), in(app2, s2)]
如果您想查看必要的绑定,您必须从交互式解释器中调用它,如图所示。