Радость (язык программирования) - Joy (programming language)

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

Язык программирования Joy в информатике - это чисто функциональный язык программирования , созданный Манфредом фон Туном из Университета Ла Троб в Мельбурне , Австралия . Радость основана на композиции функций, а не на лямбда-исчислении . Оказалось, что он имеет много общего с Forth не из-за дизайна, а из-за своего рода параллельной эволюции и конвергенции. Он также был вдохновлен стилем программирования на уровне функций от John Бакуса «s FP .

Как это работает

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

int square(int x)
{
    return x * x;
}

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

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

(define square
  (lambda (x) 
    (* x x)))

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

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

DEFINE square == dup * .

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

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

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

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

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

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

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

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

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

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

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

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

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

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