我正在尝试了解 Prolog,但我遇到了以下情况。我以下列方式定义了自然数(一元):
n(0).
n(s(X)) :- nat(X).
这意味着 0 是 0,s(0) 是 1,s(s(0)) 是 2 等等......
然后我定义谓词添加:
add(0, Y, Y) :- nat(Y).
add(s(X), Y, s(Z)) :-
add(X, Y, Z).
它将两个一元数和结果存储添加到 Z。
现在我有以下谓词“测试”证明了我的问题:
test(s(0),0).
然后在解释中输入:
add(s(0),0,R). %result: R = s(0), which is correct
然后我尝试:
test(add(s(0),0,R), 0).
所以第一个参数应该导致 R = s(0),第二个参数是零,所以整个表达式应该被评估为 true,但 prolog 说 false。我想这与这一点有关,即“测试”谓词中的 add(s(0),0,R) 不会评估我的想法。谁能向我解释一下,或者最终提供一些描述这种行为的链接?谢谢你的帮助!干杯。