Prolog:检查 yes \= yes 输出 yes 的谓词
Prolog: Predicate that checks yes \= yes outputs yes
foo(X) :-
bar(X) \= baz(X).
?- bar(2).
yes
?- baz(2).
yes
?- foo(2).
yes
为什么foo(2)
输出yes?如果我们查询 yes \= yes
,我们得到一个 no.
foo(2)
输出 yes
因为 \=/2
在 不能 将左参数与右参数统一时成功。
左边的参数是bar(2)
,右边的参数是baz(2)
,所以它们不会统一,因为每一项的主函子都不同(bar
vs baz
).这两个术语的参数 (2
) 相同并不重要。
bar(X) \= bar(X)
我们也得到了否定。但是 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)
相同。
\=
谓词的意思是“不能统一”。 yes
可以与yes
统一,但bar(2)
不能与baz(2)
统一。与 X
相同,而不是 2
。
\=
是这里调用的谓词,bar(X)
和 baz(X)
都是它的参数——它们是符号项。
Prolog 中没有术语的自动“评估”。
foo(X) :-
bar(X) \= baz(X).
?- bar(2).
yes
?- baz(2).
yes
?- foo(2).
yes
为什么foo(2)
输出yes?如果我们查询 yes \= yes
,我们得到一个 no.
foo(2)
输出 yes
因为 \=/2
在 不能 将左参数与右参数统一时成功。
左边的参数是bar(2)
,右边的参数是baz(2)
,所以它们不会统一,因为每一项的主函子都不同(bar
vs baz
).这两个术语的参数 (2
) 相同并不重要。
bar(X) \= bar(X)
我们也得到了否定。但是 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)
相同。
\=
谓词的意思是“不能统一”。 yes
可以与yes
统一,但bar(2)
不能与baz(2)
统一。与 X
相同,而不是 2
。
\=
是这里调用的谓词,bar(X)
和 baz(X)
都是它的参数——它们是符号项。
Prolog 中没有术语的自动“评估”。