В вопросе, с которым я недавно столкнулся на экзамене по логическому программированию в университете, меня попросили запрограммировать предикат Пролога odd/1
, который определяет, является ли данное значение нечетным.
Предполагалось, что реализация будет использовать уже заданный предикат s/1
, который будет оценивать преемника (то есть X + 1) данного элемента. Это было решение для реализации предиката odd/1
:
odd(s(0)):-!. % 1 is the first odd number
odd(s(s(X))):- odd(X). % A number s(s(X)) (i.e X + 2) is odd if X is odd as well
- Действительно ли
!
в первом выражении служит какой-либо цели? Я знаю, что это предотвращает возврат после этого момента, но нет следующих выражений? Означает ли это, что алгоритм разрешения просто останавливается на этом этапе? - Я пытался реализовать предикат преемника
s/1
ради практики, но не смог. (Как) Можно ли реализовать этот предикат на Прологе?
!
) делает ваше определение неполным:odd(X),X=s(s(s(0)))
не выполняется, но оно должно быть успешным, какX=s(s(s(0))),odd(X)
- person false   schedule 18.03.2014