Joy | |
---|---|
Класс языка | мультипарадигменный: функциональный, конкатенативный, стековый |
Появился в | 2001 |
Автор | Manfred von Thun |
Разработчик | Manfred von Thun, John Cowan |
Система типов | сильная, динамическая |
Основные реализации | Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)" |
Испытал влияние | Scheme, C |
Повлиял на | Factor, Cat, V, Trith |
Язык программирования Joy — чисто функциональный язык разработанный Manfred von Thun из Университета Ла Троба в Мельбурне, Австралия. 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 на стек.
Таким образом функция возведения в квадрат просто дублирует верхний элемент, а затем перемножает его на самого себя, формальные параметры не нужны. Это делает Joy лаконичным, о чём свидетельствует следующее определение быстрой сортировки:
DEFINE qsort == [small] [] [uncons [>] split] [[swap] dip cons concat] binrec .
«binrec» — один из многих существующих в Joy рекурсивных комбинаторов, реализующий бинарную рекурсию. Он ожидает наличие на стеке четырёх программных литералов, которые представляют собой:
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |
Для улучшения этой статьи желательно:
|