Я пишу предикат, чтобы найти все возможные состояния преемника для итерации 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 получает (index) -ый элемент списка. Я знаю, что они работают, и когда я смотрю на 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 был после того, как я его назвал, так что похоже, что я делаю то, что хочу, только не ... где я хочу.
Пожалуйста, как мне это исправить?