29 lines
693 B
Text
29 lines
693 B
Text
% 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).
|