Prolog:检查yes\=yes的谓词输出yes


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),因此它们不会统一,因为每个项的主函子是不同的(barbaz(。对于这两个术语,自变量(2(相同并不重要。

最新更新