Подтвердить что ты не робот

Как классифицируются J/K/APL в терминах общих парадигм?

Я только начал изучать J, что очень интересно, но мне было интересно, что это за язык именно в отношении общих парадигм и классификаций. Например, можно сказать, что F # является строго типизированным, главным образом функциональным (он поддерживает OO и процедурное программирование, но он считается "функциональным" ) языком, который принадлежит к семейству ML. Однако для J я не мог найти много того, как классифицировать его "условно" или найти что-либо в Stackoverflow, подтверждающем, что это функциональный язык программирования. Википедия говорит, что это "очень сложный язык программирования массива", "поддерживает программирование на уровне функций" и "не является языком программирования Von Neumann", ни один из которых не является более полезным.

У меня есть пара вопросов:

  • Какая основная парадигма (процедурная, OO, функциональная, логическая) подпадает под J/K/APL? Если их парадигма - это только "программирование массивов", то какая парадигма относится к ней или наиболее похожа на?

  • Какие известные языки программирования наиболее похожи на J/K/APL? Например, я бы предположил, что они похожи на Lisp, поскольку они работают с массивами (списками) и имеют минимальный синтаксис без запятой.

Я просто пытаюсь классифицировать эти языки в своей голове в соответствии с тем, что я уже знаю. Спасибо.

4b9b3361

Ответ 1

В то время как другие теги могут также применяться (как и в случае с другими языками), J, безусловно, является функциональным языком. Он имеет большинство основных атрибутов, связанных с функциональными языками, такими как функции "граждане первого класса", каррирование, функции более высокого порядка и т.д. Кроме того, если это что-то для вас значит, я читал статьи, в которых сами авторы языка описывали язык как 'функциональный'.

Вы также можете сказать, что это язык программирования массива, поскольку все функции работают с массивами по сравнению с отдельными элементами.

Я думаю, что короткий ответ, который вы ищете, это J - это язык программирования функционального массива. Вы также можете использовать другие дескрипторы, например, нестатически напечатанные и т.д.

Что касается ваших нумерованных вопросов:

  • Функциональное и массивное программирование.
  • Что касается программирования массивов, они не похожи ни на один другой известный язык; скорее они находятся в их собственной категории "языков программирования массива". Что касается функциональных аспектов, они будут в функциональной категории.

Ответ 2

J связан с видом функционального программирования (иногда называемого программированием на уровне функций, в отличие от уровня ценности), защищаемого Джоном Бэкусом, который, вероятно, более известен как изобретатель Фортрана, но провел последнюю часть своего карьера, пытаясь переместить программирование вдали от стиля, используемого Fortran.

В своей лекции по Тьюрингу, озаглавленной "Можно ли освободить программирование от стиля фон Неймана?" Бакус представил обзор своих идей, которые он экспериментировал на своих FP и FL языках. Они были в основном вдохновлены Кеном Айверсоном APL, а Айверсон, в свою очередь, заимствовал у языков Бэкуса, когда он разработал J.

Ключевой идеей, которая была расширена и развита как парадигма по мере роста языковой семьи, стало формирование алгебры программирования. Используя эти алгебраические инструменты, программист мог получить или вычислить правильную программу для решения проблемы, объединив стандартные функции более высокого порядка в соответствии с известными математическими правилами. Из реферата лекции выше:

Связанный с функциональным стилем программирования является алгеброй программ, чьи переменные располагаются над программами и чьи операции объединение форм. Эта алгебра может использоваться для преобразования программ и решать уравнения, чьи "неизвестные" являются программами почти так же преобразует уравнения в алгебре высшей школы. Эти преобразования заданные алгебраическими законами и выполняются на одном языке в какие программы написаны. Комбинированные формы выбираются не только для их мощности программирования, но также и мощности их связанных алгебраические законы. Общие теоремы алгебры дают подробные поведение и условия завершения для больших классов программ.

Хотя, похоже, не так много недавних исследований, в которых используется обозначение этого семейства языков, ключевые идеи видели несколько недавних разработок на других функциональных языках. Ричард Берд и Ламберт Меертенс работали над связанным формализмом для алгебраических манипуляций и вывода программ и данных, на которых они работают; это известно как формализм Берд-Мертенс или, неформально, Squiggol.

Птица и Филипп Вадлер позже написали текст "Введение в функциональное программирование", в котором учащиеся познакомились с более известным функциональным программированием уровня "значение" на основе лямбда-исчисления. Первоначально он использовал язык программирования Miranda, предшественник Haskell, но во втором издании был переведен на использование Haskell. Я упоминаю об этом, потому что Эрик Мейер, Маартен Фокинга и Росс Патерсон использовали примерные функции в тексте как мотивирующие примеры в своей хорошо известной работе "Функциональное программирование с бананами, объективами, конвертами, и" Колючая проволока", где они расширяют формализм Берд-Мертенса, дают ему основание в Теории категорий и показывают, как решение каждого из примеров может быть рассчитано на основе законов формализма и схем рекурсии захваченных его функциями более высокого порядка.

Эти идеи укоренились в Haskell, и там вы можете найти стиль программирования, известный как "point-free", который имеет сильное сходство с программированием FP. Он избегает названных переменных и создает новую функцию только по составу других функций. Большая часть языка не оптимизирована для этого использования, поэтому многие функции неудобны для создания в бесшумном стиле, используя только стандартные библиотеки, но доступны альтернативные библиотеки, которые предоставляют больше функций комбинаторного стиля Squiggol.

Алгебраический стиль построения программ, благодаря его математической природе, поддается высокоуровневому анализу и трансформации сложными компиляторами. Это привело к изменениям в оптимизации "Fusion" или "Обезлесение" в компиляторах функциональных языков, которые позволяют свести алгоритмы, выраженные в этом стиле, к высокоэффективным петлям машинного кода без всех данных мусора и избыточных циклов, которые потребуют более наивного перевода. Ранее в этом году была представлена ​​структура для обобщенного потока слияния, которая показала очень практические результаты в этом стиле программирования.

Надеюсь, этот фон даст вам лучшее представление о том, о чем говорила статья в Википедии, и о том, как работает базовая парадигма.