partition(_, [], [], [], []).
partition(P, [P|T], Smaller, [P|Equal], Larger) :- 
  partition(P, T, Smaller, Equal, Larger).
partition(P, [H|T], [H|Smaller], Equal, Larger) :-
  H < P, partition(P, T, Smaller, Equal, Larger).
partition(P, [H|T], Smaller, Equal, [H|Larger]) :-
  H > P, partition(P, T, Smaller, Equal, Larger).
