head([H | T], H). /* R1 */ tail([H | T], T). /* R2 */ list([H | T], H, T). /* R3 */ max([H], H). /* R4 */ max([H | T], H) :- max(T, X), H >= X. /* R5 */ max([H | T], X) :- max(T, X), H < X. /* R6 */