ECLiPSe CLP
Реализация языка программирования PrologECLiPSe (ECLiPSe Constraint Logic Programming System) — основанная на Prolog система, интегрирующая различные расширения логической парадигмы программирования, в особенности логического программирования с ограничениями (Constraint Logic Programming, CLP).
Ядро ECLiPSe является эффективной реализацией Edinburgh Prolog. В основе лежит инкрементальный компилятор исходных кодов в коды виртуальной машины.
TkECLiPSe - стандартная GUI-оболочка для ECLiPSe, версия 6.0
Примеры:
Hello, World!:
Пример для версий B-Prolog 7.4-3, ECLiPSe CLP 6.0 #188, Poplog 15.5 (Prolog), gprolog 1.3.0, swipl 5.6.xЭтот пример не требует загрузки фактов или правил. Запрос выполняется в интерактивном режиме, и его результат выглядит следующим образом:
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.
Факториал:
Пример для версий ECLiPSe CLP 6.0 #188Используется рекурсивное определение факториала.
Для организации цикла в предикате 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 ).
Числа Фибоначчи:
Пример для версий ECLiPSe CLP 6.0 #188Числа Фибоначчи вычисляются рекурсивно.
Для организации цикла в предикате 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('...').
Числа Фибоначчи:
Пример для версий 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
]]>