2
我在SWI-Prolog的編寫下面的代碼: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 OR(;)在我的代碼。當我第一次詢問Prolog中的move_ab時,第二個OR之前的所有條件都是真的,所以我從Prolog獲得了答案true。 但是我第二次問Prolog中的move_ab我只能得到答案false。 我不知道這會發生。在第二個OR之前的一些條件是不正確的,所以Prolog應該在第二個OR之後檢查條件並且給我寫消息錯誤的移動。選擇另一個。。 我嘗試使用()來分組條件,但我仍然得到相同的消息。 有關正在發生的事情的任何想法?順便說一句,我在序言對於新手,剛開始3天前:)
謝謝。幫了很多:) – Babilicious 2011-12-31 10:28:11