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

Joy (язык программирования)
Joy
Класс языка:

мультипарадигменный: функциональный, конкатенативный, стековый

Появился в:

2001

Автор(ы):

Manfred von Thun

Типизация данных:

сильная, динамическая

Основные реализации:

Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)"

Испытал влияние:

Scheme, C

Повлиял на:

Factor, Cat, V, Trith

Язык программирования Joy — это чисто функциональный язык разработанный Manfred von Thun из Университета La Trobe (англ.) в Мельбурне, Австралия. 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 на стек.

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

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


 DEFINE qsort ==
   [small]
   []
   [uncons [>] split]
   [[swap] dip cons concat]
   binrec .

«binrec» — один из многих существующих в Joy рекурсивных комбинаторов, реализующий бинарную рекурсию. Он ожидает наличие на стеке четырёх программных литералов, которые представляют собой:

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

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

Примечания

  1. Dr. Dobbs

Литература

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Joy (язык программирования)" в других словарях:

  • Конкатенативный язык программирования — Конкатенативные или стековые языки программирования основаны на том, что конкатенация двух фрагментов кода выражает их композицию. Эти языки используют стек для хранения аргументов и возвращаемых значений операций. Самый распространённый… …   Википедия

  • Factor (язык программирования) — Factor Класс языка: Конкатенативный язык программирования Появился в: 2003 Автор(ы): Слава Пестов Релиз: 0.95 ( …   Википедия

  • Cat (язык программирования) — У этого термина существуют и другие значения, см. Cat (значения). Cat Класс языка: Конкатенативный язык программирования Появился в: 2006[1] Автор(ы) …   Википедия

  • Shakespeare (язык программирования) — Shakespeare  эзотерический язык программирования разработанный Джоном Аслаудом и Карлом Хассельстромом. Язык Shakespeare призван замаскировать исходный код программы под пьесы Шекспира, как язык программирования Chef маскирует их под рецепты …   Википедия

  • Хронология языков программирования — Списки языков программирования По категориям Хронологический Генеалогический Хронология языков программирования  упорядоченный в хронологическом порядке список языков программирования. Содержание …   Википедия

  • Список языков программирования — Списки языков программирования Алфавитный По категориям Хронологический Генеалогический Цель этого алфавитного списка языков программирования состоит в том, чтобы дать полный перечень всех существующих языков программирования, как используемых в… …   Википедия

  • Список .NET-языков — Эта страница информационный список. Языки программирования .NET (Языки с поддержкой CLI или CLI языки)  компьютерные языки программирования, используемые для создания библиотек и программ, удовлетворяющих требованиям Comm …   Википедия

  • Java — Иное название этого понятия  «Ява»; см. также другие значения. Не следует путать с JavaScript. Java Класс языка …   Википедия

  • Программы юникс-подобных операционных систем — Содержание 1 Системный софт 1.1 Общего назначения 1.2 Управление системой …   Википедия

  • TeX — Тип Компьютерная вёрстка Разработчик Дональд Кнут …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»