Prolog中的谓词,如果A小于或等于B,则为真

时间:2018-06-17 15:05:49

标签: prolog successor-arithmetics

我想在prolog中写一个谓词test(A,B),如果A小于或等于B,则为真。

查询示例(应该返回true):

test(s(s(0)), s(s(s(0)))).
test(s(s(s(0))), s(s(s(0)))).

这是我到目前为止编写的代码:

test(0,0).
test(0, s(B)) :- nat(B).
test(s(A),s(B)) :- test(A,B).

但它不起作用。

1 个答案:

答案 0 :(得分:1)

我假设您使用自然数字为'0为0'且's(A)为A + 1'。然后你可以这样写:

test(0,_).                            % everything is bigger or equal to 0.
test(s(A),s(B)) :- test(A,B).         % s(A) <= s(B) when A <= B

我们将与A和B一起走下去,直到: 1)A变为0 - 表示A <= B,返回true 2)B变为0而A不是 - 它意味着B> A,返回false。