Предикат в прологе, который верен, если A меньше или равно B

Я хочу написать предикат 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 - это 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

Мы идем вниз с А и В, пока:
1) A становится 0 - это означает, что A <= B, true возвращается
2) B становится 0, а A нет - это означает B > A, возвращается false.

Другие вопросы по тегам