Я написал следующий код в SWI-Пролог:SWI-Prolog Как Пролог обрабатывает логические сравнения
:- dynamic state_a/1 .
:- dynamic state_b/1 .
:- dynamic state_c/1 .
state_a([1,2,3,4,5,0]).
state_b([0]).
chop(LIST,HEAD,TAIL) :- LIST=[HEAD|TAIL].
move_ab :- !,state_a(X),
chop(X,Ha,Ba),
Ha>0,
state_b(Y),
chop(Y,Hb,Bb),!,
(Ha<Hb ; Hb =:= 0),
asserta(state_a(Ba)),asserta(state_b([Ha|Y])),
retract(state_a(X)), retract(state_b(Y));
write('Wrong Move.Choose Another').
Есть 2 ИЛИ (;) в моем коде. Когда я спрашиваю move_ab в Prolog в первый раз, все условия до второго OR истинны, поэтому я получаю ответ true от Prolog. Но второй раз, когда я спрашиваю move_ab в Prolog, я получаю только ответ false. Я не знаю, как это может произойти. Некоторые из условий, предшествующих второму OR, неверны, поэтому Prolog должен проверить состояние после второго OR и написать мне сообщение Неправильное перемещение. Выберите другое.. Я попытался использовать() для группировки условий, но я все равно получаю то же сообщение. Любая идея о том, что происходит? Кстати я Newb в Прологе, только началось 2 дня назад :)
Спасибо. Помогли много :) – Babilicious