Нелямбда

Functional programming language
Нелямбда
ПарадигмаПочти чистый функционал
РазработаноДэвид Мадор
РазработчикДэвид Мадор
Впервые появился28 июня 1999 г .; 25 лет назад (1999-06-28)
Стабильный релиз
2.0.0 / 20 декабря 1999 г. ; 24 года назад (1999-12-20)
Дисциплина набора текстаНетипизированный
Язык реализацииСхема , C , Java
ЛицензияGPL 2.0 или более поздняя версия
Веб-сайтwww.madore.org/~david/programs/unlambda

Unlambda — это минимальный, «почти чистый » [1] функциональный язык программирования , изобретенный Дэвидом Мадором. Он основан на комбинаторной логике , системе выражений без оператора лямбда или свободных переменных. Он в основном опирается на две встроенные функции ( sи k) и оператор применения (записывается как символ `обратной кавычки ). Они одни делают его полным по Тьюрингу , но есть также некоторые функции ввода-вывода (I/O), позволяющие взаимодействовать с пользователем, некоторые функции сокращенного доступа и функция ленивой оценки . Переменные не поддерживаются.

Unlambda — это бесплатное программное обеспечение с открытым исходным кодом, распространяемое по лицензии GNU General Public License (GPL) 2.0 или более поздней версии. [ необходимо разъяснение ]

Основные принципы

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

Unlambda основана на принципе устранения абстракции , или устранения всех сохраненных переменных, включая функции. Как чисто функциональный язык, функции Unlambda являются объектами первого класса , и являются единственными такими объектами.

Вот реализация программы «Hello World» на Unlambda: [1]

`r````````````.Привет .worldi

Оригинальные встроенные функции

Обозначение обозначает функцию, которая принимает один аргумент и возвращает его без изменений, печатая один символ x как побочный эффект при вызове. представляет собой версию функции тождественности, которая не имеет такого побочного эффекта; здесь она используется как фиктивный аргумент. Программа применяет функцию -printing к фиктивному аргументу , возвращая и печатая букву как побочный эффект. Аналогично, сначала применяется к , печатая букву и возвращая ; этот результат затем применяется к , как в предыдущем примере. Функция является синтаксическим сахаром для функции, которая печатает символ новой строки..xi`.didiid``.l.di.l.dl.d.dir

Другие важные функции, предоставляемые Unlambda, включают функции kи s. kпроизводит константные функции: результатом является функция, которая при вызове возвращает x . Таким образом, значение равно x для любых x и y .`kx``kxy

sявляется обобщенным оператором оценки. оценивается как для любых x , y , и z . Примечательным фактом является то, что и достаточны для выполнения любого вычисления, как описано в комбинаторном исчислении SKI . В качестве краткого примера, функция тождества может быть реализована как , поскольку возвращает x для всех x .```sxyz``xz`yzski``skk```skkx

Единственная конструкция управления потоком Unlambda — это вызов с текущим продолжением , обозначаемым . Когда вычисляется cвыражение формы , создается специальный объект продолжения , представляющий состояние интерпретатора в этот момент. Затем вычисляется x , а затем результату передается объект продолжения в качестве аргумента. Если продолжение никогда не применяется к аргументу, значение выражения совпадает со значением x . Но если объект продолжения применяется к значению y , выполнение x немедленно прерывается, и значением всего выражения становится y .`cx`cx`cx

Семантика выполнения Unlambda обычно представляет собой активное вычисление , но существует и вариант ленивого вычисления , на который указывает использование оператора d. Обычно для вычисления выражения формы unlambda сначала вычисляет x , затем y , а затем применяет x к y . Однако если x вычисляется до специального значения , то y не вычисляется ; вместо этого значение выражения представляет собой специальный объект «отложенного вычисления», который при применении к аргументу z вычисляет y , а затем применяет свое значение к z . При отсутствии побочных эффектов это в точности то же самое, что и . Разница в том, что немедленно выполняет любые побочные эффекты в y , тогда как откладывает побочные эффекты до тех пор, пока результат не будет применен к другому аргументу.`xyd`dy`iy`iy`dy

Следующий встроенный оператор Unlambda — v, который игнорирует свой аргумент и возвращает v. Эта функция не является строго необходимой, так как vможет быть реализована как ``s`k``s``s`kskk`k``s``s`kskk, но она предоставляется для удобства. (Это выражение выше — просто `Yk, где Yобозначает комбинатор с фиксированной точкой .)

Встроенные функции версии 2

В версии Unlambda 2 появилось больше встроенных функций . Ввод данных осуществляется с помощью операторов @и . Когда применяется к функции x , символ считывается из ввода и сохраняется как «текущий символ»; затем x применяется к . Однако, если на вводе больше нет доступных символов, текущий символ остается неопределенным, а вместо этого применяется x . Когда функция применяется к функции x , результатом является оценка того, является ли текущий символ u , в противном случае оценивается.?u@iv?u`xi`xv

Также существует оператор "перепечатки" |. При вычислении функция x применяется к , если u является текущим символом, или к , если текущего символа нет.`|x.uv

Наконец, есть оператор выхода e. При eприменении к x выполнение программы прекращается, а x принимается как результат программы (большинство существующих в настоящее время интерпретаторов в любом случае игнорируют результат).

Смотрите также

Ссылки

  1. ^ ab Chu-Carroll, Mark C. (2006-08-11). "Пятничное патологическое программирование: Unlambda, или программирование без переменных". Хорошая математика, плохая математика (блог) . ScienceBlogs.
  • Феликс-Эрнандес Кампос (1 апреля 2002 г.), Лекция 28: Подробнее о функциональном программировании , Университет Северной Каролины COMP144
  • 原 悠 (Ютака Хара) (2008). Рубиで作る奇妙なプログラミング言語 (на японском языке). Токио: Майничикомюникешонзу. стр. 205–214. ISBN 978-4-8399-2784-4.
  • Официальный сайт
Retrieved from "https://en.wikipedia.org/w/index.php?title=Unlambda&oldid=1239721564"