WikiDer > Joy (язык программирования)
эта статья возможно содержит оригинальные исследования. (Май 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Парадигма | мультипарадигма: функциональный, конкатенативный, ориентированный на стек |
---|---|
Разработано | Манфред фон Тун |
Разработчик | Манфред фон Тун Джон Коуэн |
Впервые появился | 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.
Смотрите также
использованная литература
- ^ Манфред фон Тун (12 декабря 2003 г.). "Разговор с Манфредом фон Туном". Получено 31 мая, 2013.
В начале 80-х я наткнулся на знаменитую статью Бэкуса «Можно ли освободить программирование от стиля фон Неймана», и меня сразу же заинтриговал более высокий уровень программирования в его FP.
- ^ «Математические основы радости». Архивировано из оригинал 7 октября 2011 г.
внешние ссылки
- Официальный веб-сайт языка программирования Joy (Университет Ла Троб)
- Зеркало домашней страницы Joy
- Составлен информативный сборник по Joy
- немедленно исполняемый Joy (GitHub-Архив)
- Френегер, Пол (Август 2003 г.). "РАДОСТЬ вперед". Уведомления ACM SIGPLAN. 38 (8).
- фон Тун, Манфред; Томас, Рувим (9 октября 2001 г.). "Джой: функциональный кузен Форта" (PDF). Материалы 17-й Евро-четвертой конференции.
- Кристофер Диггинс (31 декабря 2008 г.). "Что такое конкатенативный язык". Доктор Доббс.
- Аптер, Стеван. «Функциональное программирование в Joy and K». Вектор. Архивировано из оригинал на 2008-08-28. Получено 2011-02-28.
- mjoy, интерпретатор в Delphi для машинного рисования (Подмножество радости)