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
]]>