递归调用prolog和传递列表

时间:2015-12-03 18:09:52

标签: prolog

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在这里给我一个错误的结果。有人能指出这个问题吗?我需要得到肯定。谢谢。 (这只是一个测试 - 而不是实际的代码)

1 个答案:

答案 0 :(得分: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).