在Prolog中列出,一个未知的替代?

时间:2014-06-08 10:12:42

标签: prolog operators

这是一个小问题,因为我对我在其中一个决赛中的节目不了解:

p(A, [A | _]).
p(B, [_, _ | C]) :- p(B, C).
q(D, [_, D | _]).
q(E, [_, _ | F]) :- q(E, F).
r(G, H) :- p(G, H).
r(I, J) :- q(I, J).

问题是制作研究之树的目的是:r(X,[a,b,c])。

实际上,有两种可能性:

  • r(G, H) :- p(G, H). (With G = X, and H = [a,b,c])

  • r(I, J) :- q(I, J). (With I = X, and J = [a, b, c])

如果我们选择第一个,我们有:p(X, [a,b,c])

所以我们可以使用第一条规则:p(A, [A | _]). (With A = X)

但我不明白为什么当我推出SWI-Prolog时,会进入X ......

谢谢!

1 个答案:

答案 0 :(得分:2)

满足r(X, [a,b,c])第一条规则令人满意p(X, [a,b,c])

p/2 p(A,[A|_])的第一条规则指出,当p(X,L)是一个列表并且其第一个元素与L统一时,就会满足目标X

在您的情况下,该列表为[a,b,c]Xa统一。