| 123456789101112131415161718 |
- partition([], _, [], []).
- partition([X|Xs], Pivot, Smalls, Bigs) :-
- ( X @< Pivot ->
- Smalls = [X|Rest],
- partition(Xs, Pivot, Rest, Bigs)
- ; Bigs = [X|Rest],
- partition(Xs, Pivot, Smalls, Rest)
- ).
-
- quicksort([]) --> [].
- quicksort([X|Xs]) -->
- { partition(Xs, X, Smaller, Bigger) },
- quicksort(Smaller), [X], quicksort(Bigger).
- perfect(N) :-
- between(1, inf, N), U is N // 2,
- findall(D, (between(1,U,D), N mod D =:= 0), Ds),
- sumlist(Ds, N).
|