General
Material
Lecture 1
Lecture 2
Lecture 3
Lecture 4
Lecture 5

Solution

%% Wrapper: the accumulator is instantiated with the empty list.
mirror(In,Out) :- mirror(In,[],Out).


%% If we reach the empty list, the accumulator should contain the
%% reversed list. Hence, we pass it on to the output argument.
mirror([],Out,Out).

%% Take the head of the list and attach it to the front of the
%% accumulator. This is the accumulator for the recursive call of
%% mirror which will process the tail of the list.
mirror([Head|Tail],Acc,Out) :- mirror(Tail,[Head|Acc],Out).
    

Back to the exercise.