Why does this Prolog Fibonacci function cause a "instantiation_error"?

clpfd, declarative, fibonacci, logic, prolog

Solution

In the second clause:

fib(N,A,B,F) :-
    N1 is N-1, Sum is A+B, fib(N1, B, Sum, F).

`N` is a variable to be decremented, and in your call to:

fib(What, 6765).

The variable is not yet defined, so you get the instantiation error on `N1 is N - 1`.

In swipl I do even get the error:

?- fib(W, 6765).
ERROR: fib/4: Arguments are not sufficiently instantiated

Problem

I am trying to calculate the Fibonacci series using the following function: ``` fib(0,A,_,A). fib(N,A,B,F) :- N1 is N-1, Sum is A+B, fib(N1, B, Sum, F). fib(N, F) :- fib(N, 0, 1, F). ``` This is intended to works like this: ``` | ?- fib(20,Result). Result = 6765 ? ``` But when I try this, it complains: ``` | ?- fib(What,6765). uncaught exception: error(instantiation_error,(is)/2) ``` Does anyone understand why this is happening?

Original source