]]> ]]>
Править | Обсудить | История

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
Логотип 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

]]>

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