Prolog; tenta tornar os fibonacci mais eficazes?

Essa programação lógica está realmente dando um lap dance em minhas habilidades de programação imperativas. Isso é lição de casa, então, por favor, não me mande a resposta. Isto é o que eu tenho:

fibo(N,1) :-
   N < 2,
   !. 
fibo(N,R) :-
   N1 is N-1,
   N2 is N-2,
   fibo(N1,R1),
   fibo(N2,R2),
   R is R1+R2.

Eu devo criar outra função que se parece com isso;fib(N,Value,LastValue). N é o enésimo número e value é o valor de retorno. Não entendo como posso reescrever isso usando acumulação. E como conta para trás, não vejo como ele pode "conhecer" um último valor antes de calcular qualquer coisa. : s Qualquer entrada é apreciada.

questionAnswers(5)

yourAnswerToTheQuestion