Joy (язык программирования)
Последнее изменение этой страницы: 12:02, 2 июня 2016.
Парадигма | мультипарадигмальный: функциональный, конкатенативный, стековый |
---|---|
Разработчики | Manfred von Thunf |
Первый появившийся | 2001 |
Печать дисциплины | сильная, динамическая |
Под влиянием | |
Scheme, C | |
Влияние | |
Factor, Cat, V, Trith |
Joy - чисто функциональный язык программирования, который был создан Манфред фон Тунoм в La Trobe в Мельбурне, Австралия. Joy основан на композиции функций, а не лямбда-исчислениях. Оказалось, что он имеет много общего с Forth. Он также был вдохновлен стилем программирования функции уровня Бакуса FP. .
Пример
Функция возведения в квадрат определяется как:
DEFINE square == dup * .
В Joy всё является функцией, принимающей стек как аргумент, и возвращающей стек в качестве результата. К примеру, цифра «5» не целая константа, а короткая программа, помещающая число 5 в стек.
- Оператор dup просто дублирует верхний элемент в стеке, помещая туда его копию.
- Оператор
*
берёт со стека два верхних элемента и помещает туда их произведение.Таким образом функция возведения в квадрат просто дублирует верхний элемент, а затем перемножает его на самоё себя, формальные параметры не нужны. Это делает Joy лаконичным.
Определение быстрой сортировки:
DEFINE qsort ==
[small]
[]
[uncons [>] split]
[[swap] dip cons concat]
binrec .
«binrec» — один из многих существующих в Joy рекурсивных комбинаторов, реализующий бинарную рекурсию. Он ожидает наличие на стеке четырёх программных литералов, которые представляют собой:
- условие прекращения (если список «мал» (1 или 0 элементов) он уже отсортирован),
- что делать, если условие прекращения выполняется,
- что делать по умолчанию (разделить список на две половины путём сравнения каждого элемента с опорной точкой),
- что делать в конце.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.