【发布时间】:2018-12-06 18:06:40
【问题描述】:
如果第一个整数正好比第二个整数大 1,程序应该返回 true。
当前代码每次都返回 false。
如果没有 abs(X-Y) == 1 行,它可以检查第二个整数是否大于第一个整数,但它应该检查差值是否正好为 1。
expected output:
greater_than(succ(succ(0)),succ(0)).
yes
greater_than(succ(succ(0)),succ(succ(succ(0)))))
no
current code :
greater_than(succ(X),0).
greater_than(succ(X),succ(Y)) :-
abs(X-Y) == 1,
greater_than(X,Y).
【问题讨论】:
-
首先,Prolog 不会在 abs 调用中评估
X-Y,除非您使用=:=运算符。其次,如果您尝试实现 Peano 算术,Prolog 的内置算术运算符肯定无法理解这一点,因此您必须找到另一种方法来实现它。想想如果 Y 代表某个数字,例如 3 或 4,Y = succ(X)会告诉你关于 X 和 Y 的内容。
标签: prolog successor-arithmetics