Unlambda
Unlambda — пример чистого функционального языка, основанного на комбинаторной логике. Единственный тип данных в языке — это функции от одного аргумента. Язык поддерживает ленивые вычисления.
Текущая версия Unlambda поддерживает 12 стандартных функций: k,i,v,s,d,c,e,r,.,?,@ и | . Применение функции обозначается обратной кавычкой (которую здесь будем обозначать как обычную) , например, запись ‘FA обозначает, что F применяется к A , или же F(A). В общем-то, для достижения полноты по Тьюрингу достаточно только двух функций: k и s.
- k принимает два аргумента (так как Unlambda признает только унарные функции, “обман” происходит с помощью карринга) и возвращает первый. Для примера: ‘kxy будет возвращать x
- s принимает три аргумента. Запись ‘sxyz будет эквивалентна ”xz’xy
- .x — данная функция принимает некий аргумент x, печатает символ “x” и возвращает его неизменным.
- r — печатает новую строку.
- d — функция для ленивых вычислений. Обычно для вычисления выражения ‘xy Unlambda сначала вычисляет x, потом y , а затем уже применяет x к y. Но если же вместо x поставить d , то есть будет выражение вида ‘dy , то y будет вычисляться только тогда, когда выражение применяется к аргументу z.
- v — функция, которая принимает аргумент, игнорирует его и возвращает v.
- В Unlambda так же есть функции для ввода-вывода. Функция @ считывает символ с устройства ввода и применяет аргумент x к i. Функция | печатает текущий символ.
- e — функция возвращает аргумент x и прерывает работу программы.
Комментарии
]]>blog comments powered by Disqus
]]>