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.