This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
csce420pine64backup/hw3/hw3pr2.pl

62 lines
1.7 KiB
Perl
Raw Normal View History

2017-11-15 17:56:06 -06:00
:- dynamic(greater/2).
2017-11-15 17:56:06 -06:00
make_rules([]).
2017-11-15 17:56:06 -06:00
make_rules([X]).
make_rules([X,Y|XS]) :-
\+ is_greater(X, Y),
assertz(greater(Y, X)),
append([Y], XS, XS2),
make_rules(XS2).
all_rules([]).
all_rules(Partial_order) :-
select(X, Partial_order, Partial_order2),
make_rules(X),
all_rules(Partial_order2).
is_greater(Y, X) :-
greater(Y, X);
greater(Z, X),
is_greater(Y, Z).
remove_duplicates([], Unsorted_flat_concise, Unsorted_flat_concise).
remove_duplicates(Unsorted_flat, Unsorted_flat2, Unsorted_flat_concise) :-
select(X, Unsorted_flat, Unsorted_flat_rest),
(member(X, Unsorted_flat2),
remove_duplicates(Unsorted_flat_rest, Unsorted_flat2, Unsorted_flat_concise);
append([X], Unsorted_flat2, Unsorted_flat3),
remove_duplicates(Unsorted_flat_rest, Unsorted_flat3, Unsorted_flat_concise)).
my_topo_sort([], Sorted2, Sorted2).
my_topo_sort(Unsorted, Sorted, Sorted2) :-
get_max(Unsorted, Max, LessList),
append(Sorted, [Max], NewSorted),
my_topo_sort(LessList, NewSorted, Sorted2).
my_topo_sort(Unsorted, Sorted) :-
all_rules(Unsorted),
flatten(Unsorted, Unsorted_flat),
remove_duplicates(Unsorted_flat, [], Unsorted_flat_concise),
my_topo_sort(Unsorted_flat_concise, [], ReverseSorted),
reverse(ReverseSorted, Sorted),
write(Sorted).
get_max([], Max, LessList, Max, LessList).
get_max(Unsorted, X, Unsorted2, Max, LessList) :-
2017-11-15 17:56:06 -06:00
select(Y, Unsorted, Rest),
(is_greater(X, Y),
append(Unsorted2, [Y], NewList),
get_max(Rest, X, NewList, Max, LessList);
append(Unsorted2, [X], NewList),
get_max(Rest, Y, NewList, Max, LessList)).
get_max(Unsorted, Max, LessList) :-
2017-11-15 17:56:06 -06:00
select(X, Unsorted, Unsorted2),
get_max(Unsorted2, X, [], Max, LessList).