22 lines
410 B
Prolog
22 lines
410 B
Prolog
:- dynamic(greater/2).
|
|
|
|
make_rules([]).
|
|
|
|
make_rules([X]).
|
|
|
|
make_rules([X,Y|XS]) :-
|
|
assertz(greater(Y, X)),
|
|
append([Y], XS, XS2),
|
|
make_rules(XS2).
|
|
|
|
my_topo_sort([], Total_order).
|
|
|
|
my_topo_sort(Partial_order, Total_order) :-
|
|
select(X, Partial_order, Partial_order2),
|
|
make_rules(X),
|
|
my_topo_sort(Partial_order2, Total_order).
|
|
|
|
is_greater(Y, X) :-
|
|
greater(Y, X);
|
|
greater(Z, X),
|
|
is_greater(Y, Z).
|