Unlambda - Unlambda
Эта статья нужны дополнительные цитаты для проверка.Август 2020 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | Около чистый функциональный |
---|---|
Разработано | Дэвид Мадор |
Разработчик | Дэвид Мадор |
Впервые появился | 28 июня 1999 г. |
Стабильный выпуск | 2.0.0 / 20 декабря 1999 г. |
Печатная дисциплина | Нетипизированный |
Язык реализации | Схема, C, Ява |
Лицензия | GPL 2.0 или новее |
Интернет сайт | www |
Unlambda минимальный, "почти чистый "[1] функциональный язык программирования изобретен Давидом Мадором. Он основан на комбинаторная логика, экспрессионная система без лямбда-оператор или свободные переменные. Он в основном полагается на две встроенные функции (s
и k
) и оператор применения (написано `
, то обратная цитата персонаж). Только они делают это Полный по Тьюрингу, но есть и ввод, вывод (I / O) функции, позволяющие взаимодействовать с пользователем, некоторые функции быстрого доступа и ленивая оценка функция. Переменные не поддерживаются.
Unlambda - это бесплатное программное обеспечение с открытым исходным кодом распространяется под Стандартная общественная лицензия GNU (GPL) 2.0 или новее.
Основные принципы
Как эзотерический язык программирования, Unlambda предназначена для демонстрации очень чистого функционального программирования, а не для практического использования. Его главная особенность - отсутствие обычных операторов и типов данных - единственный вид данных в программе - это однопараметрические функции. Тем не менее, данные можно моделировать с помощью соответствующих функций, как в лямбда-исчисление. Многопараметрические функции могут быть представлены методом карри.
Unlambda основана на принципе устранение абстракции, или удаление всех сохраненных переменных, включая функции. Как чисто функциональный язык, Unlambda имеет следующие функции: первоклассные объекты, и являются Только такие объекты.
Вот реализация привет мировая программа в Unlambda:[1]
`r``````````.H.e.l.l.o. .w.o.r.l.di
Оригинальные встроенные функции
Обозначение .Икс
обозначает функцию, которая принимает один аргумент и возвращает его без изменений, печатая единственный символ Икс как побочный эффект при его вызове. я
представляет версию функции идентификации, которая не имеет такого побочного эффекта; здесь он используется как фиктивный аргумент. Программа `.di
применяет d
-печать функцию фиктивного аргумента я
, возвращаясь я
и печать письма d
как побочный эффект. По аналогии, `` .l.di
сначала применяется .l
к .d
, распечатывая письмо л
и возвращение .d
; этот результат .d
затем применяется к я
как в предыдущем примере. Функция р
является синтаксический сахар для функции, которая печатает символ новой строки.
Другие важные функции, предоставляемые Unlambda, включают k
и s
функции. k
производит постоянные функции: результат `kИкс
это функция, которая при вызове возвращает Икс. Таким образом, ценность `` кху
является Икс для любого Икс и у.
s
- оператор обобщенного вычисления. `` сxyz
оценивает ``xz`yz
для любого Икс, у, и z. Замечательный факт, что s
и k
достаточно для выполнения любых расчетов, как описано в Расчет комбинатора SKI. В качестве краткого примера функция идентичности я
может быть реализован как `` скк
, поскольку `` сккИкс
дает Икс для всех Икс.
Единственная конструкция управления потоком Unlambda: вызов с текущим продолжением, обозначенный c
. Когда выражение формы `cИкс
оценивается особый продолжение создается объект, представляющий состояние интерпретатора в данный момент. потом Икс оценивается, а затем результат передается объекту продолжения в качестве аргумента. Если продолжение никогда не применяется к аргументу, значение `cИкс
выражение такое же, как и значение Икс. Но если объект продолжения применяется к значению у, исполнение Икс немедленно прерывается, и значение всего `cИкс
выражение у.
Семантика выполнения unlambda обычно жадная оценка, но ленивая оценка опция существует, на что указывает использование d
оператор. Обычно, чтобы оценить выражение в форме `ху
, unlambda сначала оценивает Икс, тогда у, а затем применяет Икс к у. Однако если Икс оценивает особую ценность d
, тогда у является нет оценен; вместо этого значение выражения `dу
это специальный объект «отложенного вычисления», который при применении к аргументу z, оценивает у, а затем применяет свое значение к z. При отсутствии побочных эффектов это точно так же, как `яу
. Разница в том, что `яу
выполняет любые побочные эффекты в у немедленно, тогда как `dу
откладывает побочные эффекты до тех пор, пока результат не будет применен к другому аргументу.
Следующий встроенный оператор Unlambda - v
, который игнорирует свой аргумент и возвращает v
. Эта функция не является строго необходимой, поскольку v
может быть реализован как s`k``s``s`kskk`k``s`kskk
, но поставляется для удобства. (Это выражение выше просто `Yk
, куда Y
обозначает комбинатор с фиксированной точкой.)
Встроенные функции версии 2
В Unlambda версии 2 появилось больше встроенных модулей. Вход осуществляется операторами @
и ?ты
. Когда @
применяется к функции Икс, символ считывается из ввода и сохраняется как «текущий символ»; тогда Икс применяется к я
. Однако, если на вводе больше не было символов, текущий персонаж остается неопределенным, и Икс применяется к v
вместо. Когда функция ?ты
применяется к функции Икс, результатом является оценка `Икся
если текущий персонаж ты, иначе `Иксv
оценивается.
Также есть оператор "перепечатка" |
. Когда `|Икс
оценивается функция Икс применяется к .ты
если ты текущий символ, или v
если нет текущего символа.
Наконец, есть оператор выхода е
. Когда е
применяется к Икс, выполнение программы прекращается, и Икс принимается как результат работы программы (большинство существующих в настоящее время интерпретаторов все равно игнорируют результат).
Смотрите также
Рекомендации
- ^ а б Чу-Кэрролл, Марк К. (11 августа 2006 г.). «Пятничное патологическое программирование: без лямбда, или программирование без переменных». Хорошая математика, плохая математика (блог). ScienceBlogs.
- Феликс-Эрнандес Кампос (1 апреля 2002 г.), Лекция 28: Подробнее о функциональном программировании, Университет Северной Каролины COMP144
- 原 悠 (Ютака Хара) (2008). Рубин で 作 る 奇妙 な プ ロ グ ラ ミ ン グ 言語 (на японском языке). Tōkyō: Mainichikomyunikēshonzu. С. 205–214. ISBN 4-8399-2784-7.