Prolog第一个整数正好比第二个整数大1

Prolog first integer exactly 1 greater than second integer

如果第一个整数正好比第二个整数多 1,则程序应该 return 为真。

当前代码 return每次都是假的。

如果没有 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).

A Peanox 恰好比 Peano 数 y 大 1,给定x = succ(y),所以我们可以这样写:

one_greater_than(succ(X), X).

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