This is my implementation:
popped_last_el([], [_]).
popped_last_el([F | R], [F | X]) :- popped_last_el(R, X).
last_el(X, [X]).
last_el(X, [_ | L]) :- last_el(X, L).
reverse_list([], []).
reverse_list([F | R], L2) :- last_el(F, L2), popped_last_el(L, L2), reverse_list(R, L).
When I query reverse_list([a, b], X)
, it outputs X = [b, a]
as expected. But when I ask for another solution using ;
, prolog runs indefinitely. Why?