【发布时间】:2017-11-21 19:14:25
【问题描述】:
我目前正在尝试练习一些 Prolog。我刚开始,我面临一个我不太明白的问题。我想递归地确定一个皮亚诺数是否是另一个皮亚诺数的两倍。我试图这样解决它:
isDouble(0, X,X).
isDouble(s(Peano1), Peano1, Peano2) :-
isDouble(Peano1, s(Peano1), Peano2).
由于某种原因它不起作用。有谁知道为什么?
【问题讨论】:
-
我看不到您输入的内容,所以我也看不到您的期望!您希望对它们进行求值并将它们相加,还是只是相等数量的表达式?
-
我的输入是 isDouble(s(s(0)), s(s(0)), s(s(s(s(0)))))。我只想用真或假作为答案。
-
你在这里混淆了一些东西。我假设您需要:
isDouble(X, Z) :- sum(X, X, Z).和 common definition 的sum/3。
标签: prolog successor-arithmetics