% reverse(Xs, Ys) :- Ys is a reverse of the list Xs.
reverse([], []).
reverse([X | Xs], Ys) :-
	reverse(Xs, Zs),
	app(Zs, [X], Ys).

% augmented by the APPEND program
app([], Ys, Ys).
app([X | Xs], Ys, [X | Zs]) :- app(Xs, Ys, Zs).
