18 lines
498 B
Plaintext
Executable File
18 lines
498 B
Plaintext
Executable File
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). |