0

我想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).

但它不起作用。

4

1 回答 1

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。

于 2018-06-17T16:02:31.620 回答