/* fib(n,f) iff f is the nth Fibonacci number */
/* Straight Prolog version */
/* fib(+N, -F) */
fib(0,1).
fib(1,1).
fib(N,F) :- N >= 2,
    N1 is N-1, fib(N1,F1),
    N2 is N-2, fib(N2,F2),
    F is F1+F2.

/* Using CLP(FD) */
/* fib(+N, -F) and fib(-N, +F) */
/* the latter will terminate with bound on N */
fibc(0,1).
fibc(1,1).
fibc(N,F) :- N #>= 2,
    N1 #= N-1, fibc(N1,F1),
    N2 #= N-2, fibc(N2,F2),
    F #= F1+F2.
