Ядро APL, J, K
Я пытаюсь понять APL, J, K, и это немного расстраивает, так как:
Большинство книг посвящено APL, но мало реализаций APL, и у меня нет странных клавиатур.
K, кажется, был заменен на Q
J, кажется, не имеет
Я почти чувствую, что смотрю на Common Lisp, Guile, Gambit, Chicken, SBCL - когда я действительно хочу, это увидеть две страницы оценщика схемы.
Таким образом, мой вопрос: есть ли короткий (скажем, ~50 страниц) документ, в котором обсуждается ядро APL/J/K, то есть такие вещи, как:
его модель оценки
его модель синтаксического анализа (поскольку важен приоритет слева / справа)
его синтаксис
Спасибо!
3 ответа
Я думаю, что вы умолкли на "J, кажется, не имеет...", поэтому я не знаю, нашли ли вы уже все вещи, на которые я собираюсь ссылаться, и отклонили их выше.
Я являюсь поклонником очень широкого набора языковых парадигм и набора APL/J/Q/K, я решил проводить большую часть своего времени с использованием J. Это сказало, учитывая, что J был разработан тот же Кен Айверсон из APL известности, оказывается, что большая часть того же самого мышления вошла в это. Я даже считаю, что старые статьи, написанные об APL, похоже, применимы к J после применения очень простой транслитерации.
Низкоуровневые ссылки
Самый лучший низкоуровневый эталон J (на уровне синтаксического анализа, оценки, синтаксиса и даже его внутренних примитивов структуры данных) - это набор файлов HTML, которые поставляются с открытым исходным кодом J.
Вы можете просмотреть его онлайн: здесь.
Вводные материалы более высокого уровня
Этот пост в блоге - действительно хороший ускоренный курс о том, как J думает о вещах.
В дополнение к этому я обнаружил, что на http://jsoftware.com/ есть две книги, которые дают хорошее представление о программировании на J:
- Изучение J (короче)
- J для программистов C (намного дольше)
Отличный документ - "Словарь APL " Кена Айверсона. Хотя он очень короткий, он не является хорошим учебником для языка, но он является отличным справочником. Он был написан до появления более поздних диалектов, таких как J, A и K, но в нем обсуждаются некоторые общие вариации в разных версиях APL2.
Благодаря своей долгой истории, APL претерпела несколько фундаментальных изменений в стилях и специфике.
- конец 1950-х годов: это был язык "классной доски", предназначенный для краткого описания алгоритмов и точного сообщения смысла между людьми.
- начало 1960-х годов: это был язык разработки алгоритмов. Используется для составления высокоуровневых алгоритмов, которые затем необходимо будет "скомпилировать вручную" на любом доступном машинном языке.
- конец 1960-х годов: ранние внедрения на компьютерах.
- начало 1970-х годов: Редизайн и повторная реализация под APL2.
- конец 1970-х годов: родственные языки, такие как Nial, увеличивающееся число "диалектов".
- начало 1980-х: вышеупомянутый словарь APL, который пытался обобщить и объяснить всю сеть понятий в APL2 и диалектах.
- 1980-е годы: J и K и т. Д.
Таким образом, не стоит слишком настаивать на APL, чтобы он не соответствовал ASCII, потому что он предшествует ascii почти на десятилетие. Это предшествует самой идее стандартного кода для обмена информацией. Разные машины были разные. Это было 50-х годов.
Когда наступили 60-е годы, Айверсон и его команда работали в IBM, которая могла посвятить некоторое специальное оборудование и изготовление для реализации необходимых специальных символов (сама IBM даже тогда не была городом "ascii", но использовала несколько разновидностей кодов EBCDIC).
"Классическим" утверждением ядра языка программирования J является Словарь. Я думаю, что это часть самого старого документа, изданного для языка, но используемая сегодня версия была обновлена.
В Интернете словарь можно найти в третьем столбце следующего содержания: http://www.jsoftware.com/help/dictionary/contents.htm
Этот же документ устанавливается как часть стандартной установки программного обеспечения для языка. Справочная система предоставит вам доступ к этой локальной копии, или вы можете использовать файловую систему ОС для прямого доступа к документу.
Ничто не заменило эту информацию. Это наиболее точная информация о J.
APL was originally called "Iverson notation." Ken Iverson created it as a tool for expressing algebraic statements in a form that could be executed by a computer. One of the first uses as a notation was a specification of IBM's System\360.
As to the parsing model, given the large number of primitive functions, the APL designers decided on a strict right to left precedence to avoid confusion. Other programming languages at the time APL was developed had an arithmetic hierarchy, such as multiplication happening before addition with parentheses not needed. Imposing such a hierarchy on APL would make it unusable. The right to left precedence has two exceptions: array indexing and use of parentheses.
APL's syntax is designed for consistency. User defined functions take arguments in the same way as primitives, and are evaluated with the same right to left hierarchy.