私は、A *の反復で可能なすべての継承状態を見つけて、それらを[(cost、state)、...]のようなリストに入れるための述語を書いています。これは、現時点では次のようになっています。
addSuccessors(L, [], _).
addSuccessors(L, [X|T], OrigList) :- memb(OrigList, Index, X),
add((X, Index), L, List2),
addSuccessors(List2, T, OrigList).
addSuccessors(L, [X|[]], OrigList) :- memb(OrigList, Index, X),
add((X, Index), L, L2),
addSuccessors(L2, [], OrigList).
Addはリストの最後に何かを追加し、membはリストの(インデックス)番目の要素を取得します。私はそれらが機能することを知っています、そして私が一番下の述語のL2を見るとき、私はこのようなものを手に入れます
?- addSuccessors(X, [1500, 3670], [0, 0, 0, 1500, 3670]).
X = [] ;
[ (1500, 3), (3670, 4)]
X = [] ;
X = [_G1175] ;
[_G1175, (1500, 3), (3670, 4)]
X = [_G1175] ;
X = [_G1175, _G1181] ;
[_G1175, _G1181, (1500, 3), (3670, 4)]
X = [_G1175, _G1181] ;
...
[(1500、3)、(3670、4)]リストは、Xを呼び出した後のリストであるため、非常に苛立たしいものです。
どうすればこれを修正できますか?