Jump to content

Унлямбда

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

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

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

Основные принципы [ править ]

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

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

Вот реализация программы hello world в Unlambda: [1]

`r```````````.H.e.l.l.o. .w.o.r.l.di

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

Обозначения .x обозначает функцию, которая принимает один аргумент и возвращает его без изменений, печатая один символ x в качестве побочного эффекта при вызове. i представляет версию функции идентификации, которая не имеет такого побочного эффекта; здесь он используется как фиктивный аргумент. Программа `.di применяет d-печать функции в фиктивный аргумент i, возвращаясь i и распечатать письмо d как побочный эффект. Сходным образом, ``.l.di сначала применяется .l к .d, распечатав письмо l и возвращение .d; этот результат .d затем применяется к i как в предыдущем примере. Функция r — это синтаксический сахар для функции, которая печатает символ новой строки.

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

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

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

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

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

Встроенные функции версии 2 [ править ]

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

Еще есть оператор "перепечатки" |. Когда `|x оценивается, функция x применяется к .u если u — текущий символ или v если текущего символа нет.

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

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

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

  1. ^ Jump up to: Перейти обратно: а б Чу-Кэрролл, Марк К. (11 августа 2006 г.). «Пятничное патологическое программирование: Унлямбда, или Программирование без переменных» . Хорошая математика, плохая математика (блог) . Научные блоги.

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 22595560f756308d669dcdf96e6b3efa__1687279440
URL1:https://arc.ask3.ru/arc/aa/22/fa/22595560f756308d669dcdf96e6b3efa.html
Заголовок, (Title) документа по адресу, URL1:
Unlambda - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)