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

Язык программирования Joy — чисто функциональный язык разработанный Manfred von Thun из Университета Ла Троба в Мельбурне , Австралия . Joy базируется на композиции функций, а не на лямбда-исчислении . Это язык, родственный Форту , хотя и не является его прямым наследником. В настоящее время Joy считается каноническим примером языка конкатенативного программирования .

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

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 элементов) он уже отсортирован),
  • что делать, если условие прекращения выполняется (в этом случае ничего),
  • что делать по умолчанию (разделить список на две половины путём сравнения каждого элемента с опорной точкой), и, наконец,
  • что делать в конце (вставить опорную точку между двумя отсортированными половинками).

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

Примечания

  1. Dr. Dobbs

Литература

  • (англ.) . (неопр.) // (англ.) . — 2003. — August ( т. 38 , № 8 ).
  • (англ.) ; (англ.) . (неопр.) // Proceedings of the 17th EuroForth Conference. — 2001. — 9 October.
  • Christopher Diggins. . Dr. Dobbs (31 декабря 2008). 14 мая 2012 года.
  • Apter, Stevan. (неопр.) // Vector. 28 августа 2008 года.

Ссылки

Источник —

Same as Joy (язык программирования)