~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 57DD0122325F2A1DDEF4CCC7412E70F5__1715672160 ✰
Заголовок документа оригинал.:
✰ ML (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ ML (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/ML_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/57/f5/57dd0122325f2a1ddef4ccc7412e70f5.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/57/f5/57dd0122325f2a1ddef4ccc7412e70f5__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 05:57:50 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 14 May 2024, at 10:36 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

ML (язык программирования) — Википедия Jump to content

ML (язык программирования)

Из Википедии, бесплатной энциклопедии
МЛ
Парадигма Мультипарадигмальность : функциональная , общая , императивная.
Разработано Робин Милнер и другие сотрудники Эдинбургского университета
Впервые появился 1973 год ; 51 год назад ( 1973 )
Дисциплина набора текста Предполагаемый , статичный , сильный
Диалекты
OCaml , стандартное машинное обучение , F#
Под влиянием
Я ПЛАВАЮ
Под влиянием
Clojure , Coq , Cyclone , C++ , Elm , F# , F* , Haskell , Idris , Kotlin , Miranda , Nemerle , OCaml , Opa , Erlang , Rust , Scala , Standard ML

ML ( Meta Language ) — это назначения функциональный высокоуровневый язык общего программирования . Он известен использованием полиморфной системы типов Хиндли-Милнера , которая автоматически присваивает типы данных большинству выражений , не требуя явных аннотаций типов ( вывод типов ), и обеспечивает безопасность типов; существует формальное доказательство того, что правильно типизированная программа ML не вызывает ошибок типа во время выполнения. [1] ML обеспечивает сопоставление шаблонов для аргументов функций, сборку мусора , императивное программирование , вызов по значению и каррирование . Будучи языком программирования общего назначения , ML широко используется в исследованиях языков программирования и является одним из немногих языков, которые полностью определены и проверены с использованием формальной семантики . Его типы и сопоставление с образцом делают его хорошо подходящим и широко используемым для работы на других формальных языках, например, при написании компиляторов , автоматическом доказательстве теорем и формальной проверке .

Обзор [ править ]

Возможности ML включают стратегию оценки вызова по значению , первоклассные функции , автоматическое управление памятью посредством сборки мусора, параметрический полиморфизм , статическую типизацию , вывод типа , алгебраические типы данных , сопоставление с образцом и обработку исключений . ML использует статические правила области видимости. [2]

ML можно назвать нечистым функциональным языком, поскольку, хотя он и поощряет функциональное программирование, он допускает побочные эффекты. [3] (как такие языки, как Lisp , но в отличие от чисто функционального языка, такого как Haskell ). Как и большинство языков программирования, ML использует нетерпеливую оценку , что означает, что все подвыражения всегда оцениваются, хотя ленивую оценку можно достичь за счет использования замыканий . Таким образом, бесконечные потоки можно создавать и использовать, как в Haskell, но их выражение является косвенным.

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

Машинное обучение было разработано Робином Милнером и другими в начале 1970-х годов в Эдинбургском университете . [4] и его синтаксис вдохновлен ISWIM . Исторически ML был задуман для разработки тактики доказательства в средстве доказательства теорем LCF (чей язык, plambda , комбинация исчисления предикатов первого порядка и просто типизированного полиморфного лямбда-исчисления , имел ML в качестве метаязыка).

Сегодня в семействе ML есть несколько языков; тремя наиболее известными являются Standard ML (SML), OCaml и F# . Идеи машинного обучения повлияли на многие другие языки, такие как Haskell , Cyclone , Nemerle , [5] АТС и Вяз . [6]

Примеры [ править ]

В следующих примерах используется синтаксис Standard ML. Другие диалекты машинного обучения, такие как OCaml и F#, незначительно отличаются.

Факториал [ править ]

Факториальная функция , выраженная как чистый ML:

весело   fac   (  0   :   int  )   :   int   =   1 
   |    fac   (  n   :   int  )   :   int   =   n   *   fac   (  n   -   1  ) 

Это описывает факториал как рекурсивную функцию с одним завершающим базовым случаем. Это похоже на описания факториалов, встречающиеся в учебниках математики. Большая часть кода ML похожа на математику по удобству и синтаксису.

Часть показанного определения является необязательной и описывает типы этой функции. Обозначение E:t можно прочитать как выражение E имеет тип t . Например, аргументу n присвоен тип целое число (int), а fac (n : int), результат применения fac к целому числу n, также имеет тип целое число. Функция fac в целом имеет тип функции от целого числа до целого (int -> int), то есть fac принимает целое число в качестве аргумента и возвращает целочисленный результат. Благодаря выводу типов аннотации типов могут быть опущены и будут получены компилятором. Переписанный без аннотаций типов, пример выглядит так:

весело,   факт   0   =   1 
   |    факт   n   =   n   *   факт   (  n   -   1  ) 

Функция также использует сопоставление с образцом — важную часть программирования машинного обучения. Обратите внимание, что параметры функции не обязательно заключаются в круглые скобки, а разделяются пробелами. Если аргумент функции равен 0 (ноль), она вернет целое число 1 (единица). Во всех остальных случаях пробуется вторая линия. Это рекурсия , которая выполняет функцию снова, пока не будет достигнут базовый случай.

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

забавный   факт   n   =   пусть 
   забавный   факт   0   =   1 
     |    fac   n   =   n   *   fac   (  n   -   1  ) 
   в 
     if   (  n   <   0  )   , затем   поднять   домен   else   fac   n 
   end 

Проблемный случай (когда n отрицательно) демонстрирует использование системы исключений ML.

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

забавный   факт   n   =   пусть 
   забавный   факт   0   акк   =   акк 
     |    fac   n   acc   =   fac   (  n   -   1  )   (  n   *   acc  ) 
   в 
     if   (  n   <   0  )   , затем   поднять   домен   else   fac   n   1 
   end 

Список обратный [ править ]

Следующая функция меняет местами элементы в списке. Точнее, он возвращает новый список, элементы которого расположены в обратном порядке по сравнению с заданным списком.

весело   реверс   []   =   [] 
   |    обратный   (  x   ::   xs  )   =   (  обратный   xs  )   @   [  x  ] 

Такая реализация реверса, хотя и правильная и понятная, но неэффективна и требует квадратичного времени для выполнения. Функцию можно переписать для выполнения в линейном времени :

fun   'a   обратный   xs   :   'a   list   =   List  .   свернуть   (  op   ::  )   []   xs 

Эта функция является примером параметрического полиморфизма. То есть он может использовать списки, элементы которых имеют любой тип, и возвращать списки того же типа.

Модули [ править ]

Модули — это система машинного обучения для структурирования больших проектов и библиотек. Модуль состоит из файла подписи и одного или нескольких файлов структуры. Файл подписи определяет API реализуемый (например, файл заголовка C или файл интерфейса Java ). Структура реализует подпись (например, исходный файл C или файл класса Java). Например, следующее определяет арифметическую сигнатуру и ее реализацию с использованием чисел Rational:

подпись   ARITH   = 
 подписи 
         тип   t 
         val   ноль   :   t 
         значение   succ   :   t   ->   t 
         val   sum   :   t   *   t   ->   t 
 end 
структура   Rational   :   ARITH   = 
 структуры 
         тип данных   t   =   Rat   of   int   *   int 
         val   ноль   =   Rat   (  0  ,   1  ) 
         fun   succ   (  Rat   (  a  ,   b  ))   =   Rat   (  a   +   b  ,   b  ) 
         fun   sum   (  Rat   (  a  ,   b )  ),   Крыса   (  c  ,   d  ))   =   Крыса   (  a   *   d   +   c   *   b   ,   b   *   d  ) 
 конец 

Они импортируются в интерпретатор командой «use». Взаимодействие с реализацией разрешено только через функции подписи, например, напрямую с помощью этого кода невозможно создать объект данных «Крыса». Блок «структура» скрывает все детали реализации снаружи.

Таким образом, стандартные библиотеки ML реализуются как модули.

См. также [ править ]

Ссылки [ править ]

  1. ^ Робин Милнер. Теория полиморфизма типов в программировании. Журнал компьютерных и системных наук, 17 (3): 348–375, 1978.
  2. ^ Милнер, Робин; Тофте, Мэдс (1991). «4.1 Контексты, среда и область применения». Комментарий к стандарту ОД . Массачусетский технологический институт Пресс. стр. 35–36. ISBN  0-262-63137-7 .
  3. ^ Себеста, Роберт (1999). Концепции языков программирования (4-е изд.). Аддисон-Уэстли. п. 54. ИСБН  0-201-38596-1 .
  4. ^ Гордон, Майкл Дж. К. (1996). «От LCF до HOL: краткая история» . Проверено 11 октября 2007 г.
  5. ^ Язык программирования для «спецназа» разработчиков , Российская сеть разработки программного обеспечения: Nemerle Project Team , получено 24 января 2021 г.
  6. ^ Тейт, Брюс А.; Дауд, Фред; Диз, Ян; Моффитт, Джек (2014). «3. Вяз». Еще семь языков за семь недель (версия книги: P1.0 – изд. ноября 2014 г.). ООО «Прагматические программисты». стр. 97, 101. ISBN.  978-1-941222-15-7 . На странице 101 создатель Elm Эван Чаплицки говорит: «Я склонен говорить: «Elm — это язык семейства ML», чтобы понять общее наследие всех этих языков». [под «этими языками» подразумеваются Haskell, OCaml, SML и F#.]

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 57DD0122325F2A1DDEF4CCC7412E70F5__1715672160
URL1:https://en.wikipedia.org/wiki/ML_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
ML (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)