2015-12-03 2 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. Пролог дает мне ложный результат. Может ли кто-нибудь указать на проблему, пожалуйста? Мне нужно получить «да». Спасибо. (это всего лишь тест, а не фактический код)Рекурсивный пролог вызова и список прохождения

ответ

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). 
Смежные вопросы