]]> ]]>

ECLiPSe CLP 6.0 #188

Версия реализации ECLiPSe CLP языка программирования Prolog

Последнаяя на данный момент (январь 2012) стабильная версия ECLiPSe Constraint Logic Programming System.

Примеры:

Hello, World! - Prolog (97):

Этот пример не требует загрузки фактов или правил. Запрос выполняется в интерактивном режиме, и его результат выглядит следующим образом:

Hello, World!
yes

Первая строка является собственно выводом предиката write, вторая — результат оценивания запроса.

Следует отметить, что замена одинарных кавычек на двойные выводит строку как массив ASCII-кодов отдельных символов:

| ?- write("Hello, World!").
[72,101,108,108,111,44,32,87,111,114,108,100,33]

yes

write('Hello, World!'), nl.

Факториал - Prolog (518):

Используется рекурсивное определение факториала.

Для организации цикла в предикате main используется специфичная для ECLiPSe итеративная управляющая структура (мета-предикат) for.

factorial(0, 1) :- 
    !.
factorial(N, F) :-
    N > 0,
    N1 is N - 1,
    factorial(N1, F1),
    F is N * F1.

main :-
    ( for(N, 0, 16) do
        factorial(N, F),
        write(N), write('! = '), write(F), nl ).

Числа Фибоначчи - Prolog (519):

Числа Фибоначчи вычисляются рекурсивно.

Для организации цикла в предикате main используется специфичная для ECLiPSe итеративная управляющая структура (мета-предикат) for.

fibonacci(1, 1) :- !.
fibonacci(2, 1) :- !.
fibonacci(N, F) :-
    N > 2,
    N1 is N - 1, N2 is N - 2,
    fibonacci(N1, F1), fibonacci(N2, F2),
    F is F1 + F2.

main :-
    ( for(N, 1, 16) do
        fibonacci(N, F),
        write(F), write(', ') ),
    writeln('...').

Числа Фибоначчи - Prolog (520):

Числа Фибоначчи вычисляются рекурсивно, при этом используется мемоизация, реализованная при помощи 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

]]>

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