М-выражение - M-expression
Эта статья нужны дополнительные цитаты для проверка.август 2013) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В компьютерное программирование, М-выражения (или же мета-выражения) были ранним предложенным синтаксисом для Язык программирования Лисп, вдохновленный современными языками, такими как Фортран и АЛГОЛ. Нотация никогда не была реализована в языке и, как таковая, никогда не была доработана.[1]
В сравнении с S-выражения, M-выражения вводят обозначение функции, инфиксные операторы (включая defun
оператор) и сокращение для cond
и список
на язык.[2]
Фон
Джон Маккарти опубликовал первую статью о Лиспе в 1960 году, когда научный сотрудник Массачусетский Институт Технологий. В нем он описал язык символических выражений (S-выражения ), которые могут представлять сложные структуры в виде списков. Затем он определил набор примитивных операций над S-выражениями и язык мета-выражений (M-выражений), которые можно было использовать для определения более сложных операций. Наконец, он показал, как сам метаязык может быть представлен с помощью S-выражений, в результате чего система потенциально может быть самостоятельный хостинг.[3] Черновая версия этого документа известна как «AI Memo 8».[4]
Тип выражения | Математические обозначения | М-выражение | Современное S-выражение Лиспа |
---|---|---|---|
Значение списка | [1;2;3] | (Цитировать (1 2 3)) | |
Приложение функции | f [x; y] | (ж Икс у) | |
Определение функции | метка [квадрат; λ [[x]; раз [x; x]]] | (определять квадрат (лямбда (Икс) (* Икс Икс))) | |
Условное выражение | [lessp [x; 0] → минус [x]; Т → х] | (cond ((< Икс 0) (- Икс)) (т Икс)) |
Маккарти планировал разработать автоматический компилятор Лиспа (LISP 2 ) с использованием M-выражений в качестве синтаксиса языка и S-выражений для описания внутренних процессов компилятора. Стивен Б. Рассел прочитал статью и предположил, что S-выражения являются более удобным синтаксисом. Хотя Маккарти не одобрял эту идею, Рассел и его коллега Дэниел Дж. Эдвардс вручную написали код устный переводчик программа, которая могла выполнять S-выражения.[2] Эта программа была принята исследовательской группой Маккарти, установив S-выражения как доминирующую форму Lisp.
Маккарти размышлял о судьбе М-выражений в 1979 году:
Проект точного определения M-выражений и их компиляции или, по крайней мере, перевода их в S-выражения не был ни завершен, ни явным образом отвергнут. Он просто отошел в неопределенное будущее, и появилось новое поколение программистов, которые предпочли внутреннюю нотацию любой нотации, подобной ФОРТРАНУ или АЛГОЛУ, которая могла быть изобретена.[5]
Реализации
Форма засахаренный M-выражения реализованы в Язык Wolfram из Wolfram Mathematica с 1988 г .:
Тип выражения | Синтаксис с сахаром (InputForm) | Функциональная форма (FullForm) |
---|---|---|
Значение списка | {1,2,3} | Список[1,2,3] |
Приложение функции | ж[Икс,у] | ж[Икс,у] |
Определение функции |
|
|
(Условные выражения требуют большего для объяснения, поскольку общая условная система в языке полагается на сопоставление с образцом и переписывание.)[6]
Для LISP
MLisp был современным (1968-1973) проектом по реализации интерфейса Lisp, подобного M-выражениям. Несколько дополнительных функций, таких как гигиенические макросы были включены сопоставление с образцом и поиск с возвратом. В конечном итоге он превратился в заброшенный проект LISP70. M-LISP (MetaLISP) 1989 г. был еще одной попыткой смешать M-выражения со схемой.[7]
Парсер для M-выражения "AI Memo 8" доступен в Common Lisp, но автор рассматривает это как аргумент против М-выражений из-за его предполагаемой неспособности справиться с макросами.[8]
Дальнейшее развитие
А CGOL (1977) была реализована в MacLisp и преследует аналогичную цель введения синтаксиса, подобного Алголу, с инфиксными операторами.[7] Известно, что над Вооруженный медведь Common Lisp.[9]
Более поздний (примерно 2003 г.) вариант - это Я-выражение, которые используют отступ для неявного обозначения круглых скобок и, таким образом, в некотором смысле являются промежуточными между S-выражениями и M-выражениями. I-выражения были введены в Схема запроса на реализацию 49 в качестве вспомогательного синтаксиса для Схема, но они не получили широкого распространения.[10]
Дальнейшее развитие - «сладкое» t-выражение, у которого есть инфиксные операторы без приоритета. Подобно I-выражениям, t-выражения - это всего лишь простое преобразование, отличное от S-выражений, поэтому теоретически они могут использоваться на любом диалекте Лиспа и не мешать таким функциям, как макросы.[11]
Дополнительные, связанные с синтаксисом, включают Apple Дилан (Алголоподобные токены) и Clojure Добавление других буквальных синтаксисов.[7]
Рекомендации
- ^ «Внедрение LISP». www-formal.stanford.edu. Получено 2020-03-29.
- ^ а б c "Руководство программиста LISP 1.5" (PDF). Community.computerhistory.org. 1965. Архивировано с оригинал (PDF) на 2006-02-11. Получено 2013-09-02.
- ^ Маккарти, Джон (апрель 1960) "Рекурсивные функции символьных выражений и их вычисление машиной, часть I"
- ^ Маккарти, Джон (март 1959). «Рекурсивные функции символьных выражений и их машинное вычисление (AI Memo 8)».
- ^ «Внедрение LISP». Formal.stanford.edu. 1979-02-12. Получено 2013-08-24.
- ^ Mathematica как язык перезаписи.
- ^ а б c Ли, Ха. "Обзор синтаксиса LISP Infix".
- ^ «Парсер для M-выражений».
Давайте новичкам поиграться с ними и поймем, насколько они непрактичны. Обратите внимание, например, что мы больше не можем использовать макросы, потому что их синтаксис должен быть известен парсеру M-выражений.
- ^ CGOL на ABCL Разработка реализации Common Lisp Armed Bear блог.
- ^ Мёллер, Эгиль (2003). «SRFI 49: синтаксис с учетом отступа». srfi.schemers.org.
- ^ Уиллер, Д.А. (2013). "SRFI 110: Сладкие выражения (t-выражения)". srfi.schemers.org.