Исчисление предикатов в пролог-фермерской волчьей козьей капусте
1 ответ
Предикат move/2
принимает параметры формы state/4 in
Для того чтобы реализовать состояние проблемы. В штатах первый параметр используется для фермера, второй для волка, третий для козы и четвертый для капусты. Каждая переменная параметра состояния должна получить либо значение e (для востока), либо w (для запада).
Чтобы решить проблему, вы можете определить пункты вида move(state(F1,W1,G1,C1),state(F2,W2,G2,C2)):-...
аналогично пункту на картинке.
Предикат, показанный на рисунке, используется, когда и фермер, и волк находятся на одной стороне, поэтому во входном состоянии две первые переменные являются общими (state(X,X,G,C))
и хотите двигаться в противоположную сторону, чтобы перейти к state(Y,Y,G,C)
где opp(X,Y)
истинно, что означает, что если X равен e, то и фермер, и волдет переместятся в w и наоборот. Вышеуказанный ход действителен, так как вы реализовали предыдущие ходы так, что фермер и волк не могут быть в одной и той же стороне, и одновременно коза и капуста также находятся в одной и той же стороне (козел съел бы капусту), поэтому предыдущая последовательность ходов, так как это действительно фермер и волк могут быть на одной стороне, а капуста и коза - на противоположных сторонах.