Числа Фибоначчи в Prolog
Пример для версий
ECLiPSe CLP 6.0 #188
Числа Фибоначчи вычисляются рекурсивно, при этом используется мемоизация, реализованная при помощи ECLiPSe-специфичного механизма store
.
Для организации цикла в предикате main
используется специфичная для ECLiPSe итеративная управляющая структура (мета-предикат) for
.
:- local store(fibonacci).
fibonacci(1, 1) :- !.
fibonacci(2, 1) :- !.
fibonacci(N, F) :-
N > 2,
(
% используем сохраненный результат
store_get(fibonacci, N, F), !
;
N1 is N - 1, N2 is N - 2,
fibonacci(N1, F1), fibonacci(N2, F2),
F is F1 + F2,
store_set(fibonacci, N, F) % сохраняем полученный результат
).
main :-
( for(N, 1, 16) do
fibonacci(N, F),
write(F), write(', ') ),
writeln('...').
Комментарии
]]>blog comments powered by Disqus
]]>