Prólogo; intenta hacer fibonacci más efectivo?

Esta programación lógica realmente está haciendo bailar en mis habilidades de programación imperativas. Esto es tarea, así que por favor no me dejes la respuesta. Esto es lo que tengo:

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.

Se supone que debo hacer otra función que se vea así;fib(N,Value,LastValue). N es el enésimo número y el valor es el valor de retorno. No entiendo cómo puedo reescribir esto usando la acumulación. Y dado que cuenta al revés, no veo cómo puede "conocer" un último valor antes de calcular nada. : s Cualquier entrada es apreciada.

Respuestas a la pregunta(5)

Su respuesta a la pregunta