Не думайте о числах Пеано как о числах, а как о символах.
Поймите, что четные числа Паено равны 0
, и повторение шаблона s(s(X))
, где X
может быть 0
или шаблона s(s(X))
Также я рассматриваю 0
и s(0)
и т. Д. Как данные, а вы используете s
в качестве имени предиката. Я не говорю, что это не сработает, но я не думаю об этом.
Имя предиката paeno_even
, и для него требуется один аргумент.
Базовый корпус
paeno_even(0).
следующий для рекурсивного случая
paeno_even(P)
и обработка на P просто удаляет s(s(X))
, поэтому сделайте это в голове как
paeno_even(s(s(X)))
и затем просто сделайте рекурсивный вызов
paeno_even(s(s(X))) :-
paeno_even(X).
Несколько тестов для демонстрации:
?- paeno_even(0).
true.
?- paeno_even(s(0)).
false.
?- paeno_even(s(s(0))).
true.
?- paeno_even(s(s(s(0)))).
false.
Весь код в виде одного фрагмента:
paeno_even(0).
paeno_even(s(s(X))) :-
paeno_even(X).