Предикат в прологе, который верен, если 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.