suc_list(_,[],[]).
suc_list(G0,[B/C|BB],TT):-
G is G0+C,
h(B,H), % Эвристика h(B)
F is G+H,
Suc_list(G0,BB,TT1),
Insert(l(B,F/G),TT1,TT).
/**************************************************
*Вставка дерева Т в список деревьев ТТ с сохранением *
* упорядоченности по f-оценкам *
***************************************************/
insert(T,TT,[T|TT]):-
F(T,F),
Opt_f(TT,F1),
F=<F1,!.
insert(T,[T1|TT],[T1|TT1]):-
Insert(T,TT,TT1).
/******Проверка принадлежности элемента списку******/
member(X,[X|Q]).
member(X,[H|Q]):-member(X,Q).
/******* Получение f-оценки *********/
f(l(_,F/_),F). % f-оценка листа
f(tr(_,F/_,_),F). % f-оценка дерева
opt_f([T|_],F):- % наилучшая f-оценка для
f(T,F). % списка деревьев
opt_f([],Fmax):- % нет деревьев:
max_f(Fmax). % плохая f-оценка
Min(X,Y,X):-
X=<Y,!.
Min(X,Y,Y).
max_f(9999). % Макимальное значение f-оценки
При определении этих отношений применяется следующее вспомогательное отношение: