2015-12-03 76 views
0
member_state(S, S|_). 
member_state(X, _|T) :- member_state(X,T). 

step1 :- step2(state(l,l,l,l)). 
step2(X) :- step3(X|state(l,l,l,r)). 
step3(X) :- step4(X|state(l,l,r,l)). 
step4(X) :- member_state(state(l,l,l,l), X). 

我試圖在每個調用上創建一個列表,然後在最後通過調用step1檢查插入的狀態是否在創建的列表中。 prolog在這裏給我一個錯誤的結果。任何人都可以指出這個問題嗎?我需要得到的是。謝謝。 (這只是一個測試 - 不是實際的代碼)遞歸調用序言和傳遞列表

回答

0
member_state(S, [S|_]). 
member_state(X, [_|T]) :- member_state(X,T). 

step1 :- step2([state(l,l,l,l)]). 
step2(X) :- step3([state(l,l,l,r)|X]). 
step3(X) :- step4([state(l,l,r,l)|X]). 
step4(X) :- member_state(state(l,l,l,l), X).