% The following code is derived from the Mercury Tutorial by Ralph Becket. % http://www.mercury.csse.unimelb.edu.au/information/papers/book.pdf :- module fib. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module int. :- pred fib(int::in, int::out) is det. fib(N, X) :- ( if N =< 2 then X = 1 else fib(N - 1, A), fib(N - 2, B), X = A + B ). :- func fib(int) = int is det. fib(N) = X :- fib(N, X). main(!IO) :- fib(40, X), write_string("fib(40, ", !IO), write_int(X, !IO), write_string(")\n", !IO), write_string("fib(40) = ", !IO), write_int(fib(40), !IO), write_string("\n", !IO).