]]> ]]>

Числа Фибоначчи в 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

]]>

Работа программистам