To find the maximum in a list of numbers...
max([N1|Ns], Max) :-
maxsub(Ns, N1, Max).
maxsub([], MaxTmp, MaxTmp) :-
!.
maxsub([N1|Ns], MaxTmp, Max) :-
N1 > MaxTmp, !, maxsub(Ns, N1, Max).
maxsub([N1|Ns], MaxTmp, Max) :-
maxsub(Ns, MaxTmp, Max).
This pattern can be used also for minimum number.