Can you please post the exercise instructions as given, it would be appreciated.
The way I typically give a predicate the ability to return a list is to add the list value as another argument to the predicate and then modify the predicates accordingly. e.g. start with
fibo(N, N, List)
and then
fibo_2(N, N, []) :- N<2, !.
fibo_2(N, R, [R1,R2|T2]) :-
N1 is N-1, N2 is N-2,
fibo_2(N1, R1, _),fibo_2(N2, R2, T2),
R is R1 + R2.
however when I did that it didn’t work as I expected,
?- fibo_2(6,R,L).
R = 8,
L = [5, 3, 2, 1, 1, 0].
but it was very close and shows how to add a list to what you currently have.
So to understand what was happening I modified the code to print the values along the way.
fibo_2(N, N) :- N<2, !.
fibo_2(N, R) :-
N1 is N-1, N2 is N-2,
fibo_2(N1, R1),fibo_2(N2, R2),
R is R1 + R2,
format('~nN: ~w, R1: ~w, R2: ~w',[N,R1,R2]).
and ran an example.
?- fibo_2(6,R).
N: 2, R1: 1, R2: 0
N: 3, R1: 1, R2: 1
N: 2, R1: 1, R2: 0
N: 4, R1: 2, R2: 1
N: 2, R1: 1, R2: 0
N: 3, R1: 1, R2: 1
N: 5, R1: 3, R2: 2
N: 2, R1: 1, R2: 0
N: 3, R1: 1, R2: 1
N: 2, R1: 1, R2: 0
N: 4, R1: 2, R2: 1
N: 6, R1: 5, R2: 3
R = 8.
While I haven’t completed this for your exercise, it should give you enough so that you can solve the problem on your own.