Joy (язык программирования) - Joy (programming language)

Радость
Парадигмамультипарадигма: функциональный, конкатенативный, ориентированный на стек
РазработаноМанфред фон Тун
РазработчикМанфред фон Тун
Джон Коуэн
Впервые появился2001
Стабильный выпуск
17 марта 2003 г. / 17 марта 2003 г.
Печатная дисциплинасильный, динамичный
Главный реализации
Joy0, Joy1, «Current Joy», «John Cowan's Joy», «JoyJ (Joy in jvmm)»
Под влиянием
Схема, FP, Четвертый
Под влиянием
Фактор, Кот, V, Трит

В Язык программирования Joy в Информатика это чисто функциональный язык программирования продюсером Манфреда фон Туна из Университет Ла Троб в Мельбурн, Австралия. В основе радости лежит сочетание функций, а не лямбда-исчисление. Оказалось, что он имеет много общего с Четвертый, не из-за дизайна, а из-за своего рода параллельной эволюции и конвергенции. Он также был вдохновлен стиль программирования на уровне функций из Джон Бэкус с FP.[1]

Как это устроено

Радость необычна (кроме программирование на функциональном уровне языки и некоторые эзотерические, такие как не лямбда ) в отсутствии лямбда оператор, и, следовательно, отсутствие формальные параметры. Чтобы проиллюстрировать это на общем примере, вот как функция квадрата может быть определена в императивный язык программирования (C ):

int квадрат(int Икс){    вернуть Икс * Икс;}

Переменная x - это параметр, который заменяется аргументом, который будет возведен в квадрат при вызове функции.

В функциональный язык (Схема ) можно определить ту же функцию:

(определить квадрат  (лямбда (Икс)     (* Икс Икс)))

Это во многом отличается, но по-прежнему использует параметр x таким же образом.

В Joy функция квадрата определяется:

ОПРЕДЕЛИТЬ квадрат == dup *.

В Joy все является функцией, требующей стек в качестве аргумента и в результате возвращает стек. Например, цифра «5» не представляет собой целочисленную константу, а вместо этого представляет собой короткую программу, которая помещает цифру 5 в стек.

  • В обман оператор просто дублирует верхний элемент стека, нажимая его копию.
  • В * оператор извлекает из стека два числа и выталкивает их произведение.

Таким образом, функция square делает копию верхнего элемента, а затем умножает два верхних элемента стека, оставляя квадрат исходного верхнего элемента наверху стека без необходимости в формальном параметре. Это делает Джой лаконичным, о чем свидетельствует определение термина быстрая сортировка:

 DEFINE qsort == [small] [] [recons [>] split] [enconcat] binrec.

"binrec" - одно из многих рекурсивный комбинаторы, реализующий двоичную рекурсию. Он ожидает, что на вершине стека находятся четыре процитированные программы, которые представляют:

  • условие завершения (если список «маленький» (1 или 0 элементов), он уже отсортирован),
  • что делать, если условие завершения выполнено (в данном случае ничего),
  • что делать по умолчанию (разделить список на две половины, сравнив каждый элемент с точкой поворота), и, наконец,
  • что делать в конце (вставить стержень между двумя рассортированными половинками).

Математическая чистота

В радости значение функции это гомоморфизм от синтаксический моноид на семантический моноид. То есть синтаксическое отношение конкатенация из символы отображается непосредственно на семантическую связь сочинение из функции. Это гомоморфизм а не изоморфизм, потому что это на но нет один к одному; то есть ни один символ не имеет более одного значения, но некоторые последовательности символов имеют одинаковое значение (например, «dup +» и «2 *»).

Радость - это конкатенативный язык программирования: «Объединение двух программ обозначает композицию функций, обозначенных этими двумя программами».[2]

Его библиотечные подпрограммы отражают таковые из ISO C, хотя текущую реализацию нелегко расширить с помощью функций, написанных на C.

Смотрите также

использованная литература

  1. ^ Манфред фон Тун (12 декабря 2003 г.). "Разговор с Манфредом фон Туном". Получено 31 мая, 2013. В начале 80-х я наткнулся на знаменитую статью Бэкуса «Можно ли освободить программирование от стиля фон Неймана», и меня сразу же заинтриговал более высокий уровень программирования в его FP.
  2. ^ «Математические основы радости». Архивировано из оригинал 7 октября 2011 г.

внешние ссылки