- Joy (язык программирования)
-
Joy Класс языка: мультипарадигменный: функциональный, конкатенативный, стековый
Появился в: 2001
Автор(ы): Manfred von Thun
Типизация данных: Основные реализации: Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)"
Испытал влияние: Повлиял на: Язык программирования Joy — это чисто функциональный язык разработанный Manfred von Thun из Университета La Trobe (англ.) в Мельбурне, Австралия. Joy базируется на композиции функций, а не на лямбда-исчислении. Это язык, родственный Форту, хотя и не является его прямым наследником. В настоящее время Joy считается каноническим примером языка конкатенативного программирования.[1]
Содержание
Как это работает?
Joy отличается от других языков программирования (за исключением языков комбинаторного программирования и некоторых эзотерических, таких, как unlambda) отсутствие лямбда оператора, и, следовательно, отсутствие формальных параметров. Чтобы проиллюстрировать это приведём пример, как функция возведения в квадрат может быть определена в языке императивного программирования (C):
int square(int x) { return x*x; }
Переменная х является формальным параметром, заменяемым на фактическое значение, которое необходимо возвести в квадрат, при вызове функции. В функциональном языке (Scheme) та же функция определяется следующим образом:
(define square (lambda (x) (* x x)))
Между этими двумя примерами много различий, но они используют формальные параметры сходным образом. В Joy же функция возведения в квадрат определяется как:
DEFINE square == dup * .
Всё в Joy, является функциями, принимающими стек как аргумент, и возвращающими стек в качестве результата. К примеру, цифра «5» является не целой константой, но короткой программой, помещающей число 5 на стек.
- Оператора dup просто дублирует верхний элемент в стеке, помещая туда его копию.
- Оператор * берёт со стека два верхних элемента и помещает туда их произведение.
Таким образом функция возведения в квадрат просто дублирует верхний элемент, а затем перемножает его на самоё себя, формальные параметры не нужны. Это делает Joy лаконичным, о чем свидетельствует следующее определение быстрой сортировки:
DEFINE qsort == [small] [] [uncons [>] split] [[swap] dip cons concat] binrec .
«binrec» — один из многих существующих в Joy рекурсивных комбинаторов, реализующий бинарную рекурсию. Он ожидает наличие на стеке четырёх программных литералов, которые представляют собой:
- условие прекращения (если список «мал» (1 или 0 элементов) он уже отсортирован),
- что делать, если прекращение условие выполняется (в этом случае ничего),
- что делать по умолчанию (разделить список на две половины путем сравнения каждого элемента с опорной точкой), и, наконец,
- что делать в конце (вставить опорную точку между двумя отсортированными половинками).
Математическая чистота
Примечания
- ↑ Dr. Dobbs
Литература
- Freneger, Paul (August 2003). «The JOY of forth». ACM SIGPLAN Notices 38 (8).
- (9 October 2001) «Joy: Forth’s Functional Cousin». Proceedings of the 17th EuroForth Conference.
- Christopher Diggins What is a Concatenative Language. Dr. Dobbs (Dec 31, 2008). Архивировано из первоисточника 14 мая 2012.
- Apter, Stevan. «Functional Programming in Joy and K». Vector.
Ссылки
Для улучшения этой статьи желательно?: - Исправить статью согласно стилистическим правилам Википедии.
- Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
Категории:- Появились в 2001 году
- Языки программирования по алфавиту
- Конкатенативные языки программирования
- Стековые языки программирования
- Функциональные языки программирования
Wikimedia Foundation. 2010.