foo(X) :-
bar(X) = baz(X).
?- bar(2).
yes
?- baz(2).
yes
?- foo(2).
yes
为什么foo(2)
输出是?如果我们查询yes = yes
,我们会得到一个编号
对于bar(X) = bar(X)
,我们也得到了一个no。但是baz
不是bar
。
在Prolog中;评价";条款。条款就是条款。
- 如果我们调用
bar(X)
,我们会得到X=2
(显然( - 如果我们打电话给
bar(2)
,我们会得到肯定的回复 - 如果我们打电话给
1 = 2
,我们会得到肯定的回复 - 如果我们打电话给
bar = baz
,我们会得到肯定的回复
如果我们调用bar(1) = baz(2)
、bar(2) = baz(2)
或bar(X) = baz(X)
,则相同。
CCD_ 14谓词表示";不能统一";。yes
可以与yes
统一,但bar(2)
不能与baz(2)
统一。与X
相同,而不是2
。
=
是这里调用的谓词,bar(X)
和baz(X)
都是它的自变量——它们是符号项。
没有自动的";评价";Prolog中的术语。
foo(2)
输出yes
,因为=/2
在无法将左参数与右参数统一时成功。
左自变量是bar(2)
,右自变量是baz(2)
,因此它们不会统一,因为每个项的主函子是不同的(bar
与baz
(。对于这两个术语,自变量(2
(相同并不重要。