http://nojiriko.asia/prolog/findmax.html
のmax/2の実装を見て、もっと簡潔に書けそうな気がしたのでチャレンジしてみました。

% max_list(_リスト, _リストの中の最大値).

max_list([_唯一の要素], _唯一の要素) :- !.
max_list([_先頭要素 | _残りのリスト], _最大値) :-
  max_list(_残りのリスト, _残りのリストの最大値),
  (_先頭要素 @> _残りのリストの最大値 ->
    _最大値 = _先頭要素 ;
    _最大値 = _残りのリストの最大値).

accumulatorを使うか使わないかの違いしかないですね…