【问题标题】:Prolog first integer exactly 1 greater than second integerProlog 第一个整数正好比第二个整数大 1
【发布时间】: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


【解决方案1】:

Peanox 正好比 Peano 数 y 大一,假设 x = succ(y) em>,所以我们可以在这里写成这样:

one_greater_than(succ(X), X).

鉴于第一个参数的形状为succ(X),Prolog 将致力于统一succ/1 函子的唯一参数与第二个谓词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多