首页 > 解决方案 > Prolog 第一个整数正好比第二个整数大 1

问题描述

如果第一个整数正好比第二个整数大 1,程序应该返回 true。

当前代码每次都返回 false。

如果没有 abs(XY) == 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).

标签: prologsuccessor-arithmetics

解决方案


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

one_greater_than(succ(X), X).

因此,鉴于第一个参数是 shape succ(X),Prolog 将致力于将函子的唯一参数与第二个谓词统一起来。succ/1


推荐阅读