Mercury
- Русское название:
- Меркюри
- Дата создания:
- 8 апреля 1995
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .m
- Реализации и версии (свернуть все | развернуть все):
Mercury — это функционально-логический язык программирования, предназначенный для создания прикладных программ.
Mercury разрабатывается в Мельбурнском университете на кафедре теории вычислительных систем. Первая версия была разработана Фергюсом Хендерсоном, Томасом Конвеем и Золтаном Сомоги и выпущена 8 апреля 1995 года.
Особенности языка:
- Mercury — чисто декларативный язык; у предикатов и функций нет побочных эффектов. Операции, которым побочные эффекты необходимы, например, ввод-вывод, избегают их следующим образом: их предикаты принимают на вход дополнительный параметр, так называемое “состояние мира”, разрушают его и возвращают новое состояние (плюс собственно возвращаемые значения, если они есть). Такие операции можно выполнять только в тех частях программы, где не потребуется откатывать состояние программы до предыдущего (backtracking).
- система типов языка основана на логике many-sorted с параметрическим полиморфизмом и похожа на Haskell. Сигнатура новых предикатов должна объявляться в явном виде; типы остальных переменных выводятся компилятором.
- система режимов Mercury требует явного объявления режима использования всех аргументов предиката. В настоящее время поддерживается два режима — “input” и “output”. Предикат может использоваться с одним и тем же набором аргументов в нескольких режимах. Эта система позволяет выявлять ряд ошибок на этапе компиляции программы.
- система детерминизма требует явного объявления того, сколько раз предикат может преуспеть: ровно один раз (det), не больше одного раза, не меньше одного раза и произвольное количество раз. На основании этих объявлений компилятор может доказать детерминированность программы, руководствуясь несложным набором правил.
- модульная система с возможностью раздельной компиляции.
- поддержка элементов функционального программирования.
Элементы синтаксиса:
Комментарий до конца строки | % |
---|---|
Комментарии, которые не могут быть вложенными | /* ... */ |
Регулярное выражение идентификатора переменной | [_A-Z][_a-zA-Z0-9]* |
Регулярное выражение идентификатора функции | [_a-z][_a-zA-Z0-9]* |
Объявление переменной | = |
Сравнение | < > =< >= |
Определение функции | :- func f(typ1, typ2, ...) = typ0. f(Para1, Para2, ...) = ... |
Вызов функции | f(a,b,...) |
Вызов функции без параметров | f |
Если - то - иначе | (if c then b1 else b2) |
Логотип Mercury
Примеры:
Hello, World!:
Пример для версий Mercury 10.04 :- module hello.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
main(!IO) :-
io.write_string("Hello, World!\n", !IO).
Числа Фибоначчи:
Пример для версий Mercury 10.04Вычисление и вывод на экран десятого числа последовательности Фибоначчи.
:- module fib.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module int.
:-func fib(int) = int.
fib(N) = (if N =< 2 then 1 else fib(N - 1) + fib(N - 2)).
main(!IO) :-
io.write_string("fib(10) = ", !IO),
io.write_int(fib(10), !IO),
io.nl(!IO).
% Could instead use io.format("fib(10) = %d\n", [i(fib(10))], !IO).
Комментарии
]]>blog comments powered by Disqus
]]>