Введение
Набор правил, определяющих правильно структурированные программы.
Язык программирования APL уникален тем, что он символический, а не лексический: его базовые элементы обозначаются символами, а не словами. Эти символы изначально были разработаны как математическая нотация для описания алгоритмов. Программисты на APL часто используют неформальные названия при обсуждении функций и операторов (например, "произведение" для ×/), но основные функции и операторы, предоставляемые языком, обозначаются нетекстовыми символами.
Монадические и диадические функции
Большинство символов обозначают функции или операторы. Монадическая функция принимает в качестве аргумента результат вычисления всего, что находится справа от неё (с учётом обычных правил расстановки скобок). У диадической функции есть ещё один аргумент – первый элемент данных слева от неё. Многие символы обозначают как монадические, так и диадические функции, и интерпретируются в зависимости от контекста. Например, ⌊3.2 даёт 3, наибольшее целое число, не превышающее аргумент, а 3⌊2 даёт 2, меньшее из двух аргументов.
Монадические функции
Название(s) Обозначение Значение Кодовая точка Unicode Ролл Одно целое число, выбранное случайным образом из первых B целых чисел Потолок Наименьшее целое число, большее или равное B Пол Наибольшее целое число, меньшее или равное B Форма, Rho Количество компонентов в каждом измерении B Не, Тильда Логическое: 1 становится 0, 0 становится 1 Абсолютное значение Модуль B Генератор индексов, Иота Вектор первых B целых чисел Экспонента e в степени B Отрицание Изменяет знак B Конъюгат Комплексно сопряжённое к B (действительные числа возвращаются без изменений) Сигнум -1, если B<0; 0, если B=0; 1, если B>0 Реципрокное 1, делённое на B Развёртка, Катенация, Ламинация Преобразует B в вектор Обратная матрица, Монодическое квадрупликатное деление Обратная матрица B Пи умножить Умножает на π Логарифм Натуральный логарифм B Реверс Разворачивает элементы B вдоль последней оси Реверс Разворачивает элементы B вдоль первой оси Grade up Индексы B, которые упорядочат B по возрастанию Grade down Индексы B, которые упорядочат B по убыванию Выполнить Выполняет APL выражение Монодический формат Символьное представление B Монодическая транспозиция Меняет местами оси B Факториал Произведение целых чисел от 1 до B Глубина Уровень вложенности: 1 для не вложенного массива Таблица Преобразует B в таблицу, двумерный массив.
Шрифты
Основная многоязычная плоскость Unicode включает символы APL в блоке «Разное техническое», поэтому они обычно точно отображаются из крупных шрифтов Unicode, устанавливаемых в большинстве современных операционных систем. Эти шрифты редко разрабатываются типографами, знакомыми с глифами APL. Таким образом, хотя отображение и точное, глифы могут показаться незнакомыми программистам APL или быть трудноразличимыми. Некоторые шрифты Unicode были специально разработаны для корректного отображения APL: APLX Upright, APL385 Unicode и SimPL. До появления Unicode интерпретаторы APL поставлялись со шрифтами, в которых символы APL сопоставлялись с менее используемыми позициями в наборах символов ASCII, как правило, в верхних 128 кодовых точках. Эти сопоставления (и их национальные варианты) иногда были уникальны для интерпретатора каждого производителя APL, что часто создавало проблемы с отображением программ APL в Интернете, в текстовых файлах и руководствах.
Функция клавиатуры APL2 для отображения символов
Обратите внимание на клавишу включения/выключения APL – самую верхнюю правую клавишу, расположенную чуть ниже. Также обратите внимание, что клавиатура содержала около 55 уникальных (68 указано в таблицах выше, включая сравнительные символы, но некоторые символы встречаются как в монодических, так и в диадических таблицах) клавиш с символами APL (55 функций APL (операторов) перечислены в справочном руководстве IBM 5110 APL). Таким образом, при использовании клавиш Alt, Shift и Ctrl теоретически можно было получить максимум около 59 (клавиш) * 4 (при одновременном нажатии двух клавиш) * 3 (при одновременном нажатии трех клавиш, например, Ctrl+Alt+Del) или около 472 различных комбинаций клавиш, приближающихся к максимальному числу символов EBCDIC – 512 (256 символов, умноженных на 2 кода для каждой комбинации клавиш). Опять же, теоретически, клавиатура, изображенная здесь, позволяла бы вводить с клавиатуры около 472 различных символов/функций APL, активно используя их. На практике ранние версии использовали лишь примерно эквивалент 55 специальных символов APL (исключая буквы, цифры, знаки препинания и т.д.). Таким образом, ранний APL использовал лишь около 11% (55/472) от потенциала использования символического языка в то время, обусловленного ограничениями количества клавиш на клавиатуре, снова исключая цифры, буквы, знаки препинания и т.д. В другом смысле, использование символов клавиатуры было ближе к 100%, что было очень эффективно, поскольку EBCDIC позволял только 256 различных символов, а ASCII – только 128.
Решаю головоломки
APL оказался чрезвычайно полезным в решении математических головоломок, несколько из которых описаны ниже.