Руководство по языку mercury

Skip to content


@Mercury-Language

Popular repositories


  1. The Mercury logic programming system.



    Mercury

    815

    56

  2. Packaging scripts



    Shell

    8

    3

  3. Copies of outside papers which are relevant to the implementation of the Mercury system.

    7

  4. Mercury source distribution

    5

Repositories

Type

Select type

All

Public

Sources

Forks

Archived

Mirrors

Templates

Language

Select language

All

C

HTML

Mercury

Shell

TeX

Sort

Select order

Last updated

Name

Stars

  • 5

    0

    0

    0


    Updated May 17, 2023

  • mercury


    Public

    The Mercury logic programming system.



    Mercury

    815

    56

    14

    5


    Updated May 16, 2023

  • www


    Public

    Mercury website



    HTML

    4

    5

    3

    1


    Updated May 10, 2023



  • TeX

    11

    2

    0

    0


    Updated Apr 2, 2023

  • testing


    Public

    Automated testing of Mercury ROTDs



    Shell

    1


    BSD-2-Clause

    0

    0

    0


    Updated Oct 14, 2022

  • bdwgc


    Public

    The Boehm-Demers-Weiser conservative C/C++ Garbage Collector (libgc, bdwgc, boehmgc)



    C

    1

    354

    0

    0


    Updated Oct 6, 2022

  • libatomic_ops


    Public

    The atomic_ops project (Atomic memory update operations portable implementation)



    C


    0


    GPL-2.0

    105

    0

    0


    Updated Oct 6, 2022



  • Shell

    8

    3

    5

    0


    Updated May 1, 2022

  • mercury_outside_papers


    Public

    Copies of outside papers which are relevant to the implementation of the Mercury system.

    7

    0

    0

    0


    Updated Feb 26, 2016

  • discussions


    Public

    Notes from meetings discussions and regarding ideas.

    3

    0

    0

    0


    Updated Oct 23, 2013

Most used topics

Loading…

From Wikipedia, the free encyclopedia

For Mercury Autocode, see Autocode.

Mercury

Mercury (programming language) logo.jpg
Paradigm Logic, functional, object-oriented
Designed by Zoltan Somogyi
Developer University of Melbourne
First appeared April 8, 1995; 28 years ago
Stable release

22.01.6
/ May 10, 2023; 0 days ago

Typing discipline Strong, static, polymorphic
Implementation language Mercury
Platform IA-32, x86-64, ARM, Sparc64, Java, CLI
OS Cross-platform: Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android
License GPL compiler,
LGPL standard library
Filename extensions .m
Website www.mercurylang.org
Major implementations
Melbourne Mercury Compiler
Influenced by
Prolog, Hope, Haskell

Mercury is a functional logic programming language made for real-world uses. The first version was developed at the University of Melbourne, Computer Science department, by Fergus Henderson, Thomas Conway, and Zoltan Somogyi, under Somogyi’s supervision, and released on April 8, 1995.

Mercury is a purely declarative logic programming language. It is related to both Prolog and Haskell.[1] It features a strong, static, polymorphic type system, and a strong mode and determinism system.

The official implementation, the Melbourne Mercury Compiler, is available for most Unix and Unix-like platforms, including Linux, macOS, and for Windows.

Overview[edit]

Mercury is based on the logic programming language Prolog. It has the same syntax and the same basic concepts such as the selective linear definite clause resolution (SLD) algorithm. It can be viewed as a pure subset of Prolog with strong types and modes. As such, it is often compared to its predecessor in features and run-time efficiency.

The language is designed using software engineering principles. Unlike the original implementations of Prolog, it has a separate compilation phase, rather than being directly interpreted. This allows a much wider range of errors to be detected before running a program. It features a strict static type and mode system[1] and a module system.

By using information obtained at compile time (such as type and mode), programs written in Mercury typically perform significantly faster than equivalent programs written in Prolog.[2][3] Its authors claim that Mercury is the fastest logic language in the world, by a wide margin.[1]

Mercury is a purely declarative language, unlike Prolog, since it lacks extra-logical Prolog statements such as ! (cut) and imperative input/output (I/O). This enables advanced static program analysis and program optimization, including compile-time garbage collection,[4] but it can make certain programming constructs (such as a switch over a number of options, with a default[dubious – discuss]) harder to express. While Mercury does allow impure functionality, it serves mainly as a way to call foreign language code. All impure code must be explicitly marked. Operations which would typically be impure (such as input/output) are expressed using pure constructs in Mercury using linear types, by threading a dummy world value through all relevant code.

Notable programs written in Mercury include the Mercury compiler and the Prince XML formatter. The Software company ODASE has also been using Mercury to develop its Ontology-Centric software development platform, ODASE.[5]

Back-ends[edit]

Mercury has several back-ends, which enable compiling Mercury code into several languages, including:

Production level[edit]

  • Low-level C for GNU Compiler Collection (GCC), the original Mercury back-end
  • High-level C
  • Java
  • C#

Past[edit]

  • Assembly language via the GCC back-end
  • Aditi, a deductive database system also developed at the University of Melbourne. Mercury-0.12.2 is the last version to support Aditi.[citation needed]
  • Common Intermediate Language (CIL) for the .NET Framework
  • Erlang

Mercury also features a foreign language interface, allowing code in other languages (depending on the chosen back-end) to be linked with Mercury code. The following foreign languages are possible:

Back-end Foreign language(s)
C (both levels) C
Java Java
Erlang Erlang
IL Common Intermediate Language (CIL) or C#

Other languages can then be interfaced to by calling them from these languages. However, this means that foreign language code may need to be written several times for the different backends, otherwise portability between backends will be lost.

The most commonly used back-end is the original low-level C back-end.

Examples[edit]

Hello World:

 :- module hello.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.

 :- implementation.
 main(!IO) :-
 	io.write_string("Hello, World!n", !IO).

Calculating the 10th Fibonacci number (in the most obvious way):[6]

 :- 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) = %dn", [i(fib(10))], !IO).

!IO is a «state variable», which is syntactic sugar for a pair of variables which are assigned concrete names at compilation; for example, the above is desugared to something like:

 main(IO0, IO) :-
        io.write_string("fib(10) = ", IO0, IO1),
        io.write_int(fib(10), IO1, IO2),
        io.nl(IO2, IO).

Release schedule[edit]

The stable release naming scheme was 0.1 up to 0.13 for the first thirteen stable releases. In February 2010 the Mercury project decided to name each stable release by using the year and month of the release. For example 10.04 is for a release made in April 2010.

There is often also a periodic snapshot of the development system release of the day (ROTD)

IDE and editor support[edit]

  • Developers provide support for Vim
  • Flycheck library for Emacs
  • A plugin is available for the Eclipse IDE
  • A plugin is available for the NetBeans IDE

See also[edit]

  • Curry, another functional logic language
  • Alice, a dialect language of Standard ML
  • Logtalk, language, an object-oriented extension of Prolog which compiles down to Prolog
  • Oz/Mozart, a multiparadigm language
  • Visual Prolog, language, a strongly typed object-oriented extension of Prolog, with a new syntax

References[edit]

  1. ^ a b c The Mercury Project — Motivation
  2. ^ The Mercury Project — Benchmarks
  3. ^ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas (October–December 1996). «The execution algorithm of Mercury: an efficient purely declarative logic programming language». Journal of Logic Programming. Mercurylang.org. 29 (1–3): 17–64. CiteSeerX 10.1.1.46.9861. doi:10.1016/S0743-1066(96)00068-4. Retrieved 2008-08-30.
  4. ^ Mazur, Nancy (May 2004). Compile-time garbage collection for the declarative language Mercury (PDF) (Thesis). Katholieke Universiteit Leuven.
  5. ^ ODASE
  6. ^ Adapted from Ralph Becket’s Mercury tutorial

External links[edit]

  • Official website
Меркурий

Mercury (язык программирования) logo.jpg
Парадигма Логика, функциональный, объектно-ориентированный
Разработан Золтан Сомоги
Разработчик University of Melbourne
Впервые появился 8 апреля 1995 г.; 25 лет назад (1995-04-08)
Стабильный выпуск 20.06 / 30 июня 2020 г.; 3 месяца назад (30.06.2020)
Печатная дисциплина Сильный, статический, полиморфный
Язык реализации Mercury
Платформа IA-32, x86-64, ARM, Sparc64, Java, CLI, Erlang / OTP
OS Кросс-платформенный : Unix, Linux, macOS, Solaris, FreeBSD, OpenBSD, Windows, Android
Лицензия GPL компилятор,. LGPL стандартная библиотека
Расширения имен файлов .m
Веб-сайт www.mercurylang.org
Основные реализации
Melbourne Mercury Compiler
Под влиянием
Prolog, Hope, Haskell

Mercury — это язык функционального логического программирования, созданный для использования в реальном мире. Первая версия была разработана в Мельбурнском университете на факультете компьютерных наук Фергусом Хендерсоном, Томасом Конвеем и Золтаном Сомоги под руководством Сомоги и выпущена 8 апреля 1995 года.

Mercury — это чисто декларативный язык логического программирования. Это связано как с Prolog, так и с Haskell. Он имеет сильную, статическую, полиморфную систему типов , а также строгую систему режимов и детерминизма.

Официальная реализация Melbourne Mercury Compiler доступна для большинства Unix и Unix-подобных платформ, включая Linux, macOS и для Windows.

Содержание

  • 1 Обзор
  • 2 Внутренние компоненты
    • 2.1 Уровень производства
    • 2.2 Прошлые
  • 3 Примеры
  • 4 График выпуска
  • 5 Поддержка IDE и редактора
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки

Обзор

Mercury основан на языке логического программирования Prolog. Он имеет тот же синтаксис и те же основные концепции, такие как алгоритм выборочного линейного разрешения определенных предложений (SLD). Его можно рассматривать как чистое подмножество Prolog с сильными типами и режимами. Таким образом, его часто сравнивают со своим предшественником по функциям и эффективности во время выполнения.

Язык разработан с использованием принципов программной инженерии. В отличие от исходных реализаций Prolog, он имеет отдельную фазу компиляции, а не напрямую интерпретируется. Это позволяет обнаруживать гораздо более широкий спектр ошибок перед запуском программы. Он имеет строгий статический тип и систему режимов и систему модулей.

Используя информацию, полученную во время компиляции (например, тип и режим), программы, написанные на Mercury, обычно работают значительно быстрее, чем эквивалентные программы, написанные на Prolog. Его авторы с большим отрывом заявляют, что Mercury — самый быстрый логический язык в мире.

Mercury — чисто декларативный язык, в отличие от Prolog, поскольку в нем отсутствует внелогические операторы Пролога, такие как !(вырезать) и императив ввод / вывод (ввод / вывод). Это обеспечивает расширенный статический анализ программ и оптимизацию программ, включая сборку мусора во время компиляции , но может создавать определенные программные конструкции (например, переключение числа вариантов, по умолчанию) выразить сложнее. (Хотя Mercury действительно допускает нечистую функциональность, это служит в основном способом вызова кода на иностранном языке. Весь нечистый код должен быть явно отмечен.) Операции, которые обычно будут нечистыми (например, ввод / вывод ), выражаются использование чистых конструкций в Mercury с использованием линейных типов, путем пропуска фиктивного мирового значения через весь соответствующий код.

Известные программы, написанные на Mercury, включают компилятор Mercury и форматировщик Prince XML. Софтверная компания Mission Critical IT также использует Mercury с 2000 года для разработки корпоративных приложений и своей платформы разработки программного обеспечения ODASE на основе онтологий.

Back-end

Mercury имеет несколько back-end, которые включить компиляцию кода Mercury на несколько языков, в том числе:

Уровень производства

  • Низкий уровень C для GNU Compiler Collection (GCC), исходная версия Mercury back- end
  • Высокоуровневый C
  • Java
  • C#
  • Erlang

Прошлый

  • язык ассемблера через серверную часть GCC
  • Aditi, также дедуктивная система баз данных разработан в Мельбурнском университете. Mercury-0.12.2 является последней версией, поддерживающей Aditi.
  • Common Intermediate Language (CIL) для .NET Framework

Mercury также имеет интерфейс на иностранном языке, позволяющий код на других языках ( в зависимости от выбранной серверной части) для связывания с кодом Mercury. Возможны следующие иностранные языки:

Back-end Иностранный язык (и)
C (оба уровня) C
Java Java
Erlang Erlang
IL Common Intermediate Language (CIL) или C#

Другие языки могут быть затем сопряжены с вызовом их из этих языков. Однако это означает, что код на иностранном языке, возможно, придется писать несколько раз для разных бэкэндов, иначе переносимость между бэкэндами будет потеряна.

Наиболее часто используемая внутренняя часть — это исходная базовая часть C низкого уровня.

Примеры

Hello World :

: - модуль hello. : - интерфейс. : - import_module io. : - pred main (io :: di, io :: uo) равно det. :- реализация. main (! IO): - io.write_string ("Hello, World!  n",! IO).

Вычисление 10-го числа Фибоначчи (наиболее очевидным способом):

: - модуль fib. : - интерфейс. : - import_module io. : - pred main (io :: di, io :: uo) равно det. :- реализация. : - import_module int. : - функция fib (int) = int. fib (N) = (если 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) = %dn", [i(fib(10))], !IO).

! IO— это «переменная состояния», которая является синтаксическим сахаром для пары переменных, которым при компиляции присваиваются конкретные имена; например, приведенное выше сокращено до чего-то вроде:

main (IO0, IO): - io.write_string ("fib (10) =", IO0, IO1), io.write_int (fib (10), IO1, IO2), io.nl (IO2, IO).

График выпуска

Релизы названы в соответствии с годом и месяцем выпуска. Текущий стабильный выпуск — 20.06 (30 июня 2020 г.). Предыдущие выпуски были пронумерованы 0,12, 0.13 и т. Д., А время между стабильными выпусками может составлять до 3 лет.

Часто бывает также выпуск моментальных снимков дня (ROTD), состоящий из последних функций и исправлений ошибок, добавленных в последний стабильный выпуск.

Поддержка IDE и редактора

  • Разработчики обеспечивают поддержку
  • библиотеки Flycheck для Emacs
  • Доступен плагин для Eclipse IDE
  • Доступен подключаемый модуль для IDE NetBeans

См. Также

  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • C urry, другой функциональный логический язык
  • Алиса, диалектный язык Standard ML
  • Logtalk, язык, объектно-ориентированное расширение Prolog, которое компилируется до Prolog
  • Oz / Mozart, мультипарадигмальный язык
  • Visual Prolog, язык, строго типизированное объектно-ориентированное расширение Prolog, с новым синтаксисом

Ссылки

Внешние ссылки

  • Официальный сайт

.

Московский физико-технический институт

Опубликован: 08.07.2011 | Доступ: свободный | Студентов: 0 / 0 | Оценка: 4.80 / 4.70 | Длительность: 04:48:00

Теги: 1-грамматика, алгоритм, алгоритмы, вычисления, логика, отсечение, парадигма программирования, поиск, предикат, программирование, пролог-программа, семантика, функция, язык программирования

Аннотация: Пролог-программа. Свободные и связные переменные. Структурные термы для представления бесконечных объектов. Характеристики операторов. Встроенные предикаты. Язык Mercury. Режимы предикатов.

Смотреть на youtube || на ИНТУИТ в качестве: низком | среднем | высоком

Dmytro Malishevskyi

Dmytro Malishevskyi

Пропала возможность скачивать презентации к лекциям курса. Куда писать баг-репорт?

P.S.: Курс «Логическое программирование».

У этого термина существуют и другие значения, см. Mercury.

Mercury

Mercury pl logo.jpg
Класс языка:

логический, функциональный

Появился в:

1995

Автор(ы):

Zoltán Somogyi

Релиз:

11.07 (22 декабря 2011)

Типизация данных:

строгая, статическая, полиморфная

Основные реализации:

Melbourne Mercury Compiler

Испытал влияние:

Prolog, Haskell

Лицензия

GPL для компилятора, LGPL для стандартной библиотеки

Сайт:

http://www.mercury.csse.unimelb.edu.au/

Mercury — язык функционально-логического программирования со строгой типизацией, призванный решить следующие две проблемы, которые возникают при использовании классического языка логического программирования Prolog:

  1. проблема производительности. Современные реализации языков логического программирования по производительности уступают реализациям языков программирования императивного типа.
  2. проблема отладки. Реализации языков логического программирования осуществляют меньше проверок во время компиляции, чем реализации языков программирования императивного типа. Это вынуждает программиста находить ошибки самому и без какой-либо существенной помощи со стороны отладчика.

Язык разработан в Мельбурнском университете. Первую версию выпустили Fergus Henderson, Thomas Conway и Zoltan Somogyi 8 апреля 1995 года.

Особенности

Синтаксис Mercury частично унаследован от Пролога, система типов похожа на Haskell. Это чисто декларативный язык, разработчики полностью убрали из него все императивные возможности, что позволило улучшить встроенные в компилятор возможности оптимизации. Название Mercury, дано в честь бога скорости Меркурия, и отражает направленность на получение быстродействующих программ. Операции, при реализации которых обычно отказываются от чисто-декларативного подхода, такие как ввод-вывод, выражаются в Mercury с помощью декларативных конструкций, используя линейные типы.

Реализация

Компилятор языка Mercury написан на самом языке. До того как компилятор Mercury смог скомпилировать себя сам, был использован язык Prolog. Он распространяется на условиях лицензии GPL, работает на всех современных операционных системах. Имеется возможность транслировать код на многие популярные языки программирования, такие как: C, Java, Erlang, IL для платформы .NET.

С 2010 Проект Mercury имеет 6-месячный цикл выпуска релизов, где старший номер версии соответствует году выпуска, младший — месяцу начала работы над релизом. Более ранние версии имели номера вроде 0.12, 0.13… и время между выпуском стабильных версий было очень велико (около 3 лет).

Компилятор Mercury распространяется на официальном сайте в исходных кодах, пользователи Windows также могут воспользоваться неофициальным дистрибутивом winmercury. Это удобный инсталлятор, устанавливающий MinGW, компилятор GCC и все необходимые файлы Mercury в скомпилированном и настроенном виде. Также содержит файл справки в формате HTML Help с удобным оглавлением и индексом, а также плагин для редактора Vim. Самая свежая на сегодняшний день сборка winmercury — 10.07.

Примеры

Hello World:

 :- module hello.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.
 
 :- implementation.
 main(!IO) :-
        io.write_string("Hello, World!n", !IO).

Вычисление 10-го числа Фибоначчи (наиболее очевидным способом)[1]:

 :- 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) = %dn", [i(fib(10))], !IO).

Примечания

  1. На основе Ralph Becket’s Mercury tutorial

Ссылки

  • mercury.cs.mu.oz.au — Официальный сайт Mercury в Мельбурнском университете
  • mercurylanguage.ucoz.ru — Русскоязычное сообщество
  • code.google.com/p/winmercury — winmercury, User-friendly Mercury distribution for Windows
  • adventuresinmercury.blogspot.com — Adventures in Mercury, блог посвященный языку
 Просмотр этого шаблона Основные языки программирования (сравнение • IDE • история • хронология)
Используемые
в разработке

Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET)

Академические

Agda • Clean • Curry • Лого • ML • РЕФАЛ • Симула • Оберон

IEC 61131-3

Instruction List • ST • FBD • Ladder Diagram (LD) • SFC

Прочие

Алгол • Алгол 68 • Модула-2 • Миранда • Hope

Эзотерические

HQ9+/HQ9++ • INTERCAL • Brainfuck • Brainfork • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE

Визуальные

G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч

Понравилась статья? Поделить с друзьями:
  • Руководство по работе в меркурию
  • Отчет анализ смк со стороны руководства в лаборатории пример отчета
  • Руководство к образованию нем учителей автор
  • Рициниол укропный инструкция по применению цена
  • Руководство пользователя живой физики