这是一个小问题,因为我对我在其中一个决赛中的节目不了解:
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 ......
谢谢!
答案 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]
,X
与a
统一。