~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 61F2A5EFC8585E1E1B9CEFEEDE0C9B1B__1702472820 ✰
Заголовок документа оригинал.:
✰ APL syntax and symbols - Wikipedia ✰
Заголовок документа перевод.:
✰ Синтаксис и символы APL — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/APL_syntax_and_symbols ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/61/1b/61f2a5efc8585e1e1b9cefeede0c9b1b.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/61/1b/61f2a5efc8585e1e1b9cefeede0c9b1b__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 01:32:23 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 13 December 2023, at 16:07 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Синтаксис и символы APL — Википедия Jump to content

Синтаксис и символы APL

Из Википедии, бесплатной энциклопедии

Язык программирования APL отличается тем, что является символическим , а не лексическим : его примитивы обозначаются символами , а не словами. Эти символы изначально были разработаны как математическое обозначение для описания алгоритмов. [1] Программисты APL часто присваивают неофициальные имена при обсуждении функций и операторов (например, «продукт» для ×/), но основные функции и операторы, предоставляемые языком, обозначаются нетекстовыми символами.

Монадические и диадические функции [ править ]

Большинство символов обозначают функции или операторы . Монадическая . функция принимает в качестве аргумента результат вычисления всего, что находится справа от нее (Управляется обычным способом с помощью круглых скобок.) Диадическая функция имеет еще один аргумент — первый элемент данных слева от нее. Многие символы обозначают как монадические, так и диадические функции, интерпретируемые в зависимости от использования. Например, ⌊3.2 дает 3, самое большое целое число, не превышающее аргумент, а 3⌊2 дает 2, меньший из двух аргументов.

Функции и операторы [ править ]

APL использует термин « оператор» в смысле Хевисайда как модератор функции, в отличие от использования того же термина в некоторых других языках программирования в качестве чего-то, что работает с данными, см. реляционный оператор и операторы вообще . Другие языки программирования также иногда используют этот термин как синоним функции , однако в APL оба термина используются более точно. [2] [3] [4] [5] [6] Ранние определения символов APL были очень конкретными в отношении их классификации. [7] Например, оператор сокращения обозначается косой чертой и уменьшает массив по одной оси, вставив свой функциональный операнд . Пример сокращения :

      ×/2 3 4
24
 
<< Эквивалентные результаты в APL >>
<< сокращения Оператор / используется слева
      2×3×4
24
 

В приведенном выше случае уменьшения или косой черты оператор модерирует функцию умножения . Выражение ×/2 3 4 дает скалярный результат (только 1 элемент) путем сокращения массива путем умножения. Приведенный выше случай упрощен: представьте, что вы умножаете (складываете, вычитаете или делите) больше, чем просто несколько чисел вместе. (Из вектора ×/ возвращает произведение всех его элементов.)


      1 0 1\45 67
45 0 67
 
<< Противоположные результаты в APL >>
<< Развернуть двоичную функцию \ используется слева
Реплицировать диадическую функцию / используется справа >>
      1 0 1/45 0 67
45 67
 

Приведенные выше примеры диадических функций [левый и правый примеры] (с использованием одного и того же символа / , правый пример) демонстрируют, как логические значения (0 и 1) могут использоваться в качестве левых аргументов для \expand и /reреплицировать функций для получения совершенно противоположных результатов. С левой стороны двухэлементный вектор {45 67} расширяется там, где встречаются логические 0, что приводит к трехэлементному вектору {45 0 67} — обратите внимание, как APL вставил 0 в вектор. И наоборот, с правой стороны происходит прямо противоположное — где трехэлементный вектор становится всего лишь двухэлементным; логические 0 удаляют элементы с помощью функции диад /косая черта . Символы APL также работают со списками (векторами) элементов, используя типы данных, отличные от числовых, например, двухэлементный вектор строк символов {"Яблоки" "Апельсины"} можно заменить числовым вектором {45 67} выше.

Синтаксические правила [ править ]

В APL иерархия приоритетов функций и операторов строго позиционная: выражения вычисляются справа налево. APL не следует обычному приоритету операторов других языков программирования; например, × не связывает свои операнды более «жестко», чем +. Вместо приоритета операторов APL определяет понятие области действия .

Область действия функции ее определяет аргументы . Функции имеют длинную правую область видимости : то есть они принимают в качестве правильных аргументов все, что находится справа от них. Диадическая функция имеет короткую левую область видимости : она принимает в качестве левых аргументов первый фрагмент данных слева от нее. Например, (крайний левый столбец ниже — это фактический программный код из сеанса пользователя APL , с отступом = фактический ввод пользователя , без отступа = результат, возвращаемый интерпретатором APL ):


Оператор может иметь функцию или операнды данных и возвращать двоичную или монадическую функцию. Операторы давно вышли за рамки. Оператор принимает в качестве левого операнда самую длинную функцию слева от него. Например:

Левый операнд для каждого оператора ¨это индексная функция. Производная функция ⍳¨ используется монадически и принимает в качестве правого операнда вектор 3 3. Левая область каждого завершается оператором сокращения , обозначаемым косой чертой . Его левый операнд — это функциональное выражение слева от него: внешний продукт функции равенства . Результатом ∘.=/ является монадическая функция. При обычной длинной правой области видимости функции она принимает в качестве правого аргумента результат ⍳¨3 3. Таким образом



Монадические функции [ править ]

Имя(а) Обозначения Значение Кодовая точка Юникода
Рулон ?B Одно целое число, выбранное случайным образом из первых B целых чисел U+003F ? ВОПРОСИТЕЛЬНЫЙ ЗНАК
Потолок ⌈B Наименьшее целое число, большее или равное B U + 2308 ЛЕВЫЙ ПОТОЛОК
Пол ⌊B Наибольшее целое число, меньшее или равное B U+230A ЛЕВЫЙ ЭТАЖ
Форма, Ро ⍴B Количество компонентов в каждом измерении B U + 2374 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL RHO
Нет , Тильда ∼B Логично: ∼1 — 0, ∼0 — 1. U + 223C ОПЕРАТОР ТИЛЬДА
Абсолютная величина ∣B Величина B U + 2223 РАЗДЕЛЯЕТ
Генератор индексов, Йота ⍳B Вектор первых B целых чисел U + 2373 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL IOTA
Экспоненциальный ⋆B е в B степени U + 22C6 ЗВЕЗДНЫЙ ОПЕРАТОР
Отрицание −B Меняет знак B U + 2212 ЗНАК МИНУС
Сопряженный +B Комплексно-сопряженное число B (действительные числа возвращаются без изменений) U + 002B + ЗНАК ПЛЮС
Знак ×B ¯1, если B <0; 0, если В =0; 1, если B >0 U + 00D7 × ЗНАК УМНОЖЕНИЯ
Взаимный ÷B 1 разделить на Б U+00F7 ÷ ЗНАК РАЗДЕЛЕНИЯ
Равель, Катенат, Ламинат ,B Преобразует B в вектор U+002C , ЗАПЯТЬЯ
Обратная матрица , монадическое деление на квадрики ⌹B Обратная матрица B U + 2339 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL QUAD DIVIDE
Пи времена ○B Умножить на π U+25CB БЕЛЫЙ КРУГ
Логарифм ⍟B Натуральный логарифм B U + 235F ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL КРУГ ЗВЕЗДА
Разворот ⌽B Поменяйте местами элементы B вдоль последней оси. U + 233D ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL, СТИЛЬ КРУГА
Разворот ⊖B Поменяйте местами элементы B вдоль первой оси. U + 2296 ОБВЕДЕННЫЙ МИНУС
Повышение класса ⍋B Индексы B , которые расположит B в порядке возрастания . U + 234B ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ДЕЛЬТА-СТИЛЬ
Понизить оценку ⍒B Индексы B , которые расположит B в порядке убывания . U + 2352 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL DEL STILE
Выполнять ⍎B Выполнить APL выражение U + 234E ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ВНИЗ.
Монадический формат ⍕B Представление персонажа B U + 2355 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL UP TACK JOT
Монадическое транспонирование ⍉B Поменяйте местами оси B. U + 2349 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL, обратная косая черта в круге
Факториал !B Произведение целых чисел от 1 до B У+0021 ! ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК
Глубина ≡B Глубина вложенности: 1 для невложенного массива. U + 2261 ИДЕНТИЧЕН
Стол ⍪B Превращает B в таблицу, двумерный массив. U + 236A ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ЗАПЯТАЯ

Диадические функции [ править ]

Имя(а) Обозначения Значение Юникод
кодовая точка
Добавлять A+B Сумма А и Б U + 002B + ЗНАК ПЛЮС
Вычесть A−B А минус Б U + 2212 ЗНАК МИНУС
Умножить A×B А , умноженное на Б U + 00D7 × ЗНАК УМНОЖЕНИЯ
Разделять A÷B А разделить на Б U+00F7 ÷ ЗНАК РАЗДЕЛЕНИЯ
Возведение в степень A⋆B A возведен в B степень U + 22C6 ЗВЕЗДНЫЙ ОПЕРАТОР
Круг A○B Тригонометрические функции B , выбранные A
A  =1: грех(  B  )  A  =5: грех(  B  ) 
  А  =2: соз(  В  )  А  =6: соз(  В  ) 
  A  =3: загар(  B  )  A  =7: рыбный(  B  ) 
 

Отрицательные значения производят инверсию соответствующих функций.

U+25CB БЕЛЫЙ КРУГ
Иметь дело A?B Различные целые числа, выбранные случайным образом из первых B целых чисел U+003F ? ВОПРОСИТЕЛЬНЫЙ ЗНАК
Членство, Эпсилон A∈B 1 для элементов A , присутствующих в B ; 0 где нет. U+2208 ЭЛЕМЕНТ
Найди, Эпсилон Чудесный A⍷B 1 для начальной точки многоэлементного массива A , присутствующего в B ; 0 где нет. U + 2377 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ЭПСИЛОН ЧУДЕСНЫЙ
Максимум , Потолок A⌈B Большее значение A или B U + 2308 ЛЕВЫЙ ПОТОЛОК
Минимум , Этаж A⌊B Меньшее значение A или B U+230A ЛЕВЫЙ ЭТАЖ
Изменение формы, Диадический Ро A⍴B Массив формы A с данными B U + 2374 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL RHO
Брать A↑B Выберите первый (или последний) элемент A из B в соответствии с × A. U+2191 СТРЕЛКА ВВЕРХ
Уронить A↓B Удалите первые (или последние) элементы A из B в соответствии с × A. U + 2193 СТРЕЛКА ВНИЗ
Декодировать A⊥B Значение многочлена, коэффициенты которого равны B в точке A U+22A5 СПАСИБО
Кодировать A⊤B База — представление значения B. U+22A4 ВНИЗ, СПАСИБО
Остаток A∣B Б по модулю А U + 2223 РАЗДЕЛЯЕТ
катенация A,B Элементы B добавлены к элементам A U+002C , ЗАПЯТЬЯ
Расширение, Двойная обратная косая черта A\B Вставьте нули (или пробелы) в B , соответствующие нулям в A. U+005C \ ОБРАТНЫЙ СОЛИДУС
Сжатие, Двойной удар A/B Выберите элементы в B , соответствующие элементам в A. U + 002F / СОЛИДУС
Индекс, Диадическая Йота A⍳B Расположение (индекс) B в A ; 1+⍴A если не найден U + 2373 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL IOTA
Матричное деление, диадическое квадроделение A⌹B Решение системы линейных уравнений , множественная регрессия A x = B U + 2339 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL QUAD DIVIDE
Вращение A⌽B Элементы B вращаются в A. позиции U + 233D ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL, СТИЛЬ КРУГА
Вращение A⊖B Элементы B поворачиваются в позиции A вдоль первой оси. U + 2296 ОБВЕДЕННЫЙ МИНУС
Логарифм A⍟B Логарифм B по основанию A U + 235F ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL КРУГ ЗВЕЗДА
Диадический формат A⍕B Отформатируйте B в символьную матрицу в соответствии с A. U + 2355 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL UP TACK JOT
Общее транспонирование A⍉B Оси B упорядочены по A U + 2349 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL, обратная косая черта в круге
Комбинации A!B Количество комбинаций B , взятых A за раз У+0021 ! ВОСКЛИЦАТЕЛЬНЫЙ ЗНАК
Диерезис, Диерезис, Двойная точка A¨B Над каждым или выполнять каждое отдельно; B = на них; A = операция, которую необходимо выполнить или использовать (например, йота) U+00A8 ¨ ДИЭРЕЗ
Меньше, чем A<B Сравнение: 1, если правда, 0, если ложь. U + 003C < ЗНАК МЕНЬШЕ, ЧЕМ
Меньше или равно A≤B Сравнение: 1, если правда, 0, если ложь. U + 2264 МЕНЬШЕ ИЛИ РАВНО
Равный A=B Сравнение: 1, если правда, 0, если ложь. U+003D = ЗНАК РАВНА
Больше или равно A≥B Сравнение: 1, если правда, 0, если ложь. U + 2265 БОЛЬШЕ ИЛИ РАВНО
Больше чем A>B Сравнение: 1, если правда, 0, если ложь. U + 003E > ЗНАК БОЛЬШЕ, ЧЕМ
Не равный A≠B Сравнение: 1, если правда, 0, если ложь. U+2260 НЕ РАВНО
Или A∨B Булева логика: 0 (ложь), если и A , и B = 0 , в противном случае — 1. Alt: 1 (Истина), если A или B = 1 (Истина). U + 2228 ЛОГИЧЕСКОЕ ИЛИ
И A∧B Булева логика: 1 (истина), если оба A и B = 1 , 0 (ложь) в противном случае. U+2227 ЛОГИЧЕСКОЕ И
Ни A⍱B Булева логика: 1, если оба A и B равны 0, в противном случае 0. Alt: ~∨ = not Или U + 2371 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ВНИЗ КАРЕТКА ТИЛЬДА
Нанд A⍲B Булева логика: 0, если и A , и B равны 1, в противном случае 1. Alt: ~∧ = не И U + 2372 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ВЕРХНЯЯ КАРЕТКА ТИЛЬДА
Левый A⊣B А U+22A3 ОСТАВИЛ СПАСИБО
Верно A⊢B Б U+22A2 ПРАВИЛЬНО, СПАСИБО
Соответствовать A≡B 0, если A не соответствует B точно по значению, форме и вложенности; иначе 1. U + 2261 ИДЕНТИЧЕН
Ламинат A⍪B Объединение по первой оси U + 236A ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL ЗАПЯТАЯ

Операторы и индикатор оси [ править ]

Имя(а) Символ Пример Значение (пример) Последовательность кодовых точек Юникода
Уменьшить (последняя ось), Слэш / +/B Сумма по B U + 002F / СОЛИДУС
Уменьшить (первая ось) +⌿B Суммируем Б U + 233F ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL. КРАСНАЯ ПОЛОСКА
Сканирование (последняя ось), обратная косая черта \ +\B Текущая сумма по B U+005C \ ОБРАТНЫЙ СОЛИДУС
Сканирование (первая ось) +⍀B Проведение суммы вниз B U + 2340 ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL обратная косая черта
Внутренний продукт . A+.×B Матричное произведение A и B U + 002E . ПОЛНАЯ ОСТАНОВКА
Внешний продукт ∘. A∘.×B продукт Внешний A и B U+2218 КОЛЬЦО ОПЕРАТОР , U + 002E . ПОЛНАЯ ОСТАНОВКА

Примечания: Операторы сокращения и сканирования ожидают двоичную функцию слева, образуя монадическую составную функцию, применяемую к вектору справа.

Оператор продукта "." ожидает двоичную функцию как слева, так и справа, образуя двоичную составную функцию, применяемую к векторам слева и справа. Если функция слева от точки равна «∘» (означает ноль), то составная функция является внешним продуктом, в противном случае — внутренним продуктом. Внутренний продукт, предназначенный для обычного умножения матриц, использует функции + и ×, замена их другими двоичными функциями может привести к полезным альтернативным операциям.

За некоторыми функциями может следовать индикатор оси в (квадратных) скобках, т. е. он появляется между функцией и массивом, и его не следует путать с индексами массива, написанными после массива. Например, учитывая функцию ⌽ (разворот) и двумерный массив, функция по умолчанию работает вдоль последней оси, но это можно изменить с помощью индикатора оси:


В частном случае, если за диадической катенатной функцией «,» следует индикатор оси (или модификатор оси символа/функции), ее можно использовать для ламинирования (вставки) двух массивов в зависимости от того, меньше ли индикатор оси или больше, чем начало индекса [8] (начало индекса = 1 на рисунке ниже):

Вложенные массивы [ править ]

Массивы — это структуры, элементы которых сгруппированы линейно в виде векторов или в табличной форме в виде матриц , а также в более высоких измерениях (3D или в кубе, 4D или в кубе во времени и т. д.). Массивы, содержащие как символы, так и числа, называются смешанными массивами . [9] Структуры массивов, содержащие элементы, которые также являются массивами, называются вложенными массивами . [10]

Создание вложенного массива
Сеанс пользователя с интерпретатором APL Объяснение
      X 4  5 ⍴⍳ 20 
      X 
 1   2   3   4   5 
 6   7   8   9  10 
11  12  13  14  15 
16  17  18  19  20 
      X [ 2 ; 2 ] 
7 
      ⎕IO 
1 
      X [ 1 ; 1 ] 
1 


X set = матрица с 4 строками и 5 столбцами, состоящая из 20 последовательных целых чисел.

Элемент X[2;2] в строке 2 – столбце 2 в настоящее время имеет целое число = 7 .

Начальное происхождение индекса ⎕IO value = 1 .

Таким образом, первый элемент матрицы X или X[1;1] = 1 .

      Икс  [  2  ;   2  ]  «Текст» 
       X  [  3  ;   4  ]  (  2   2  ⍴⍳  4  ) 
       X 
   1      2    3        4      5 
   6   Текст    8        9     10 

  11     12   13      1   2     15 
                3   4 

  16     17   18       19     20 
Элемент в X[строка 2; столбец 2] заменяется (с 7) на вложенный вектор «Текст» с использованием функции включения ⊂ .


Элемент в X[строка 3; столбец 4], ранее целое число 14, теперь становится мини- вложенной или ⊂ вложенной матрицей размером 2x2 из 4 последовательных целых чисел.

Поскольку X содержит числа , текст и вложенные элементы , это одновременно смешанный и вложенный массив.

Визуальное представление вложенного массива

Управление потоком [ править ]

Пользователь , может определять собственные функции , которые, как и переменные, идентифицируются по имени а не по нетекстовому символу. определяет Заголовок функции , является ли пользовательская функция ниладической (без аргументов), монадической (один правый аргумент) или диадной (левый и правый аргументы), локальное имя результата ( слева от стрелки назначения ← ), а также то, является ли она имеет какие-либо локальные переменные (каждая разделена точкой с запятой ';').

Пользовательские функции
Ниладическая функция PI или π(pi) Монадическая функция CIRCLEAREA Диадическая функция SEGMENTAREA с локальными переменными
  RESULT PI 
   RESULT 1 
 
  AREA CIRCLEAREA  RADIUS 
   AREA PI × RADIUS 2 
 
   ПЛОЩАДЬ  ГРАДУСЫ   СЕГМЕНТАРНЫЙ   РАДИУС   ;    ДОЛЯ   ;   CA 
     ДОЛЯ  ГРАДУСЫ  ÷  360 
    CA  КРУГЛАЯ   РАДИУС 
    ПЛОЩАДЬ  ДРОБЬ  ×  CA 
 

Различаются ли функции с одинаковым идентификатором, но разной сложностью , зависит от реализации. Если это разрешено, то функцию CURVEAREA можно определить дважды, чтобы заменить как монадическую CIRCLEAREA, так и диадическую SEGMENTAREA выше, при этом монадическая или диадическая функция выбирается в зависимости от контекста, в котором на нее ссылаются.

Пользовательские диадические функции обычно могут применяться к параметрам с теми же соглашениями, что и встроенные функции, т. е. массивы должны либо иметь одинаковое количество элементов, либо один из них должен иметь один расширенный элемент. Есть исключения из этого правила: например, функция для преобразования недесятичной валюты Великобритании в доллары должна принимать параметр, состоящий ровно из трех элементов, представляющих фунты, шиллинги и пенсы. [11]

Внутри программы или пользовательской функции управление может быть условно передано оператору, определяемому номером строки или явной меткой; если целью является 0 (ноль), это завершает программу или возвращает вызывающую функцию. В наиболее распространенной форме используется функция сжатия APL, как в шаблоне (условии)/цели, результатом которой является оценка условия до 0 (ложь) или 1 (истина), а затем использование ее для маскировки цели (если условие равно false игнорируется, если true, то остается в покое, поэтому управление передается).

Следовательно, функцию SEGMENTAREA можно изменить для прерывания (чуть ниже), возвращая ноль, если параметры (DEGREES и RADIUS ниже) имеют разные знаки:

  ПЛОЩАДЬ  ГРАДУСЫ   СЕГМЕНТАРНЫЙ   РАДИУС   ;    ДОЛЯ   ;    Калифорния   ;    SIGN       ⍝ локальные переменные, обозначаемые точкой с запятой (;) 
   FRACTION  DEGREES  ÷  360 
   CA  CIRCLEEAREA   RADIUS          ⍝ этот оператор кода APL вызывает пользовательскую функцию CIRCLEAREA, определенную выше. 
    ЗНАК  (  ×  ГРАДУСЫ  )  ≠×  РАДИУС       ⍝ << Логика APL ТЕСТ/определение, НЕ имеют ли ГРАДУСЫ и РАДИУС (≠ используются) одинаковый ЗНАК 1-да, разные(≠), 0-нет (один и тот же знак) 
   ОБЛАСТЬ  0                        ⍝ по умолчанию значение AREA установлено = ноль 
   SIGN  /  0                       ⍝ ветвление (здесь выход) происходит, когда SIGN=1, тогда как SIGN=0 НЕ переходит в 0. Ветвление в 0 завершает функцию. 
    ПЛОЩАДЬ  ДОЛЯ  ×  CA 

Вышеупомянутая функция SEGMENTAREA работает должным образом, если параметры являются скалярами или одноэлементными массивами , но не в том случае, если они являются многоэлементными массивами , поскольку условие в конечном итоге основано на одном элементе массива SIGN - с другой стороны, пользователь функцию можно изменить для правильной обработки векторизованных аргументов. Операция иногда может быть непредсказуемой, поскольку APL определяет, что компьютеры с возможностями векторной обработки должны распараллеливать и могут переупорядочивать операции с массивами, насколько это возможно - таким образом, тестируйте и отлаживайте пользовательские функции , особенно если они будут использоваться с векторными или даже матричными аргументами. Это влияет не только на явное применение пользовательской функции к массивам, но и на ее использование везде, где можно разумно использовать диадическую функцию, например, при создании таблицы результатов:

        90  180  270  ¯90  ∘. SEGMENTAREA  1  ¯2  4 
0  0  0 
0  0  0 
0  0  0 
0  0  0 

Более краткий, а иногда и лучший способ — сформулировать функцию — избегать явной передачи управления и вместо этого использовать выражения, которые правильно вычисляются во всех или ожидаемых условиях. Иногда правильно допустить сбой функции, когда один или оба входных аргумента неверны - именно для того, чтобы пользователь знал, что один или оба использованных аргумента неверны. Следующая функция более лаконична, чем приведенная выше функция SEGMENTAREA. Ниже важно правильно обрабатывать векторизованные аргументы:

   ПЛОЩАДЬ  ГРАДУСЫ   СЕГМЕНТАРНЫЙ   РАДИУС   ;    ДОЛЯ   ;    Калифорния   ;    ЗНАК 
    ДРОБЬ  ГРАДУСЫ  ÷  360 
    CA   ЦИРКЛЕАРИИ 
    ЗНАК РАДИУСА  (  ×  ГРАДУСЫ  )  ×  РАДИУСА 
    ПЛОЩАДЬ  ДРОБЬ  ×  CA  ×~  ЗНАК    ⍝ этот оператор APL более сложен, как однострочный - но он решает векторизованные аргументы: компромисс - сложность в сравнении с ветвлением 
 

         90   180   270   ¯90   ∘.   SEGMENTAREA   1   ¯2   4 
 0,785398163   0             12,5663706 
 1,57079633    0             25,1327412 
 2,35619449    0             37,6991118 
 0             ¯3,14159265   0 

Избегание явной передачи управления, также называемой ветвлением, если его не проверять или тщательно не контролировать, может способствовать использованию чрезмерно сложных однострочников , поистине «неправильно понятых и сложных идиом» и стиля «только для записи», который мало что сделал для того, чтобы расположить APL к влиятельным лицам. комментаторы, такие как Эдсгер Дейкстра . [12] И наоборот, идиомы APL могут быть забавными, познавательными и полезными — если их использовать с полезными комментариями ⍝ , например, с указанием источника, предполагаемого значения и функции идиом(ы). Вот список идиом APL , список идиом IBM APL2 здесь. [13] и библиотека финских идиом APL здесь .

Разное [ править ]

Разные символы
Имя(а) Символ Пример Значение (пример) Кодовая точка Юникода
Высокий минус [14] ¯ ¯3 Обозначает отрицательное число U+00AF ¯ МАКРОН
Лампа, Комментарий ⍝This is a comment Все, что справа от ⍝, обозначает комментарий. U + 235D ФУНКЦИОНАЛЬНЫЙ СИМВОЛ APL UP SHOE JOT
Стрелка вправо, Ветка, Перейти →This_Label →This_Label отправляет выполнение APL на This_Label: U + 2192 СТРЕЛКА ВПРАВО
Назначить, Стрелка влево, Установить на B←A B ←A устанавливает значения и форму B в соответствии с A. U + 2190 СТРЕЛКА ВЛЕВО

Большинство реализаций APL поддерживают ряд системных переменных и функций, которым обычно предшествует символ ⎕ (квадратный) и/или «)» ( крючок = закрывающая скобка). Обратите внимание, что четырехзначный символ — это не то же самое, что символ пропущенного символа Юникода . Особенно важной и широко применяемой является переменная ⎕IO ( Index Origin ), поскольку, хотя исходный IBM APL основывал свои массивы на 1, некоторые новые варианты основывают их на нуле:

Сеанс пользователя с интерпретатором APL Описание
        X 12 
        X 
1  2  3  4  5  6  7  8  9  10  11  12 
        ⎕IO 
1 
        X [ 1 ] 
1 

X set = вектору из 12 последовательных целых чисел.

Начальное происхождение индекса ⎕IO value = 1 . Таким образом, первая позиция в векторе X или X[1] = 1 на вектор значений йоты { 1 2 3 4 5 ...}.

        ⎕IO   
        X[1]
2
        X[0]
0 
Индекс Origin ⎕IO теперь изменен на 0. Таким образом, «первая позиция индекса» в векторе X меняется с 1 на 0. Следовательно, X[1] затем ссылается или указывает на 2 из {1 2 3 4 5 ...} и X[0] теперь ссылается на 1 .
        ⎕WA 
41226371072 
Quad WA или ⎕WA , еще одна динамическая системная переменная , показывает, сколько рабочей области остается неиспользованной , или 41 226 мегабайт или около 41 гигабайт неиспользуемой дополнительной общей свободной рабочей области, доступной для рабочего пространства APL и программы для обработки. Если это число становится низким или приближается к нулю, компьютеру может потребоваться больше оперативной памяти (ОЗУ), места на жестком диске или некоторая комбинация того и другого для увеличения виртуальной памяти .
        )  ВАРС 
 X 
)VARS — системная функция в APL, [15] )VARS показывает имена пользовательских переменных, существующие в текущей рабочей области.

Пользователям также доступны системные функции для сохранения текущего рабочего пространства, например, )SAVE и завершения среды APL, например, )OFF - иногда называемые командами или функциями- перехватчиками из-за использования ведущей правой скобки или перехватчика. [16] Существует некоторая стандартизация этих функций Quad и Hook.

Шрифты [ править ]

Unicode Базовая многоязычная плоскость включает символы APL в блок «Разное техническое» , [17] которые, таким образом, обычно точно отображаются из более крупных шрифтов Unicode, установленных в большинстве современных операционных систем. Эти шрифты редко разрабатываются типографами, знакомыми с глифами APL. Таким образом, несмотря на то, что глифы точны, они могут показаться программистам APL незнакомыми или их будет трудно отличить друг от друга.

Некоторые шрифты Unicode были разработаны для хорошего отображения APL: APLX Upright, APL385 Unicode и SimPL.

До появления Unicode интерпретаторы APL поставлялись со шрифтами, в которых символы APL отображались в менее часто используемые позиции в наборах символов ASCII, обычно в верхних 128 кодовых точках. Эти сопоставления (и их национальные варианты) иногда были уникальными для интерпретатора каждого поставщика APL, что делало отображение программ APL в Интернете, в текстовых файлах и руководствах часто проблематичным.

Функция клавиатуры APL2 для сопоставления символов [ править ]

Клавиатура APL2
Клавиатура APL2

Обратите внимание на кнопку включения/выключения APL — самую верхнюю правую кнопку, чуть ниже. Также обратите внимание, что на клавиатуре было около 55 уникальных (68 перечисленных в таблицах выше, включая сравнительные символы, но несколько символов встречаются как в монадических, так и в диадических таблицах) клавиш с символами APL (55 функций (операторов) APL перечислены в справочном руководстве IBM 5110 APL), таким образом с использованием клавиш alt, Shift и ctrl - теоретически можно было бы максимум около 59 (клавиш) *4 (при нажатии двух клавиш) *3 (при нажатии трех клавиш, например, ctrl-alt-del) или около 472 различных максимальных комбинаций клавиш, что приближается к максимальному значению 512 символов EBCDIC (256 символов, умноженных на 2 кода для каждой комбинации клавиш). Опять же, теоретически клавиатура, изображенная здесь, позволяла бы активно использовать около 472 различных символов/функций APL. На практике в ранних версиях использовалось только что-то примерно эквивалентное 55 специальным символам APL (исключая буквы, цифры, знаки препинания и т. д.). Таким образом, ранний APL тогда использовал только около 11% (55/472) потенциала использования символического языка на тот момент, исходя из ограничений на количество клавиш клавиатуры, опять же исключая цифры, буквы, знаки препинания и т. Д. В другом смысле символы клавиатуры использование было ближе к 100%, что было очень эффективно, поскольку EBCDIC допускал только 256 различных символов и ASCII только 128.

Решение головоломок [ править ]

APL оказался чрезвычайно полезным при решении математических головоломок, некоторые из которых описаны ниже.

Треугольник Паскаля [ править ]

Возьмем треугольник Паскаля , который представляет собой треугольный массив чисел, в котором числа на концах строк равны 1, а каждое из остальных чисел представляет собой сумму двух ближайших чисел в строке чуть выше него (вершина 1 находится в точке вершина). Ниже приведена однострочная функция APL для визуального изображения треугольника Паскаля:

      Паскаль  {  0  ~  ¨⍨  а  ⌽⊃⌽∊  ¨  0  ,  ¨¨  а  !   ¨  a  ⌽⍳  }     ⍝ Создайте однострочную пользовательскую функцию с именем Pascal 
       Pascal   7                              ⍝ Запустите функцию Pascal для семи строк и покажите результаты ниже: 
                      1                        
                  1         2                    
              1         3         3                
           1        4         6         4            
        1       5         10        10        5        
     1       6        15        20        15        6    
  1       7       21        35        35        21       7 

Простые числа, доказательство обратного множителей с помощью

Определите количество простых чисел (простое # — натуральное число больше 1 , не имеющее положительных делителей, кроме 1 и самого себя) до некоторого числа N. Кену Айверсону приписывают следующее однострочное решение APL проблемы:

      ⎕CR   'PrimeNumbers'    ⍝ Показать пользовательскую функцию APL PrimeNumbers 
 Primes  PrimeNumbers   N       ⍝ Функция принимает один правый аргумент N (например, показать простые числа для 1 ... int N) 
 Простые числа  (  2  =+  0  =  (  N  )  |⍳  N  )  /  N    ⍝ Однострочные 
       простые числа   Кена Айверсона 100      ⍝ Показать все простые числа от 1 до 100 
 2   3   5   7   11   13   17   19   23   29   31   37   41   43   47   53   59   61   67   71   73   79   83   89   97 
       PrimeNumbers   100 
 25                         ⍝ В диапазоне до 100 имеется двадцать пять простых чисел. 

Часто необходимо исследовать обратное или противоположное математическому решению ( целочисленные множители числа ): Докажите для подмножества целых чисел от 1 до 15, что они непростые, перечислив их коэффициенты разложения . Каковы их неединичные делители (число делится на, кроме 1)?

      ⎕CR   'ProveNonPrime' 
 Z  ProveNonPrime   R 
 ⍝Показать все делители целого числа R, кроме 1 и самого числа, 
 ⍝ т. е. доказать, что число не простое.   Строка «prime» возвращается для простого целого числа. 
  Z  (  0  =  (  R  )  |  R  )  /  R    ⍝ Определить все множители для целого числа R, сохранить в Z 
 Z  (  ~  (  Z  1  ,  R  ))  /  Z     ⍝ Удалить 1 и число как множители для число из Z. 
 (  0  =⍴  Z  )  /  ProveNonPrimeIsPrime                 ⍝ Если результат имеет нулевую форму, он не имеет других сомножителей и, следовательно, является простым 
 Z  R  ,  (  " факторы(кроме 1) "  )  ,  (  Z  )  ,  ⎕ TCNL    Показать число R, его множители (кроме самого 1) 
 Готово  с    непростая 
 .  она   строку  ,  и  функцией  char  новую  0  если    ⍝  если число было простым 

       ProveNonPrime   ¨  15        ⍝ Доказать непростые числа для каждого(¨) целых чисел от 1 до 15 (iota 15) 
     1    простое 
     2    простое 
     3    простое 
     4    множителя  (  кроме   1  )     2  
     5    простое 
     6    множителей  (  кроме   1  )     2   3  
     7    простых 
     8    факторов  (  кроме   1  )     2   4  
     9    факторов  (  кроме   1  )     3  
     10    факторов  (  кроме   1  )     2   5  
     11    простых 
     12    факторов  (  кроме   1  )     2   3   4   6  
     13    простых 
     14    факторов  (  кроме   1  )     2   7  
     15    факторов  (  кроме   1  )     3   5 

Последовательность Фибоначчи [ править ]

Создайте последовательность чисел Фибоначчи , где каждое последующее число в последовательности представляет собой сумму двух предыдущих:

      ⎕CR   'Fibonacci'                ⍝ Функция отображения Fibonacci 
 FibonacciNum  Fibonacci   Nth  ;   IOwas     ⍝ Заголовок функции, имя функции = Фибоначчи, монадическая функция с 1 правым аргументом Nth; локальная переменная IOwas и возвращаемое число. 
  ⍝Сгенерируйте последовательность чисел Фибоначчи, где Nth — позиция # числа Фибоначчи в последовательности.   << описание функции 
 IOwas  ⎕IO    ⎕IO  0    FibonacciNum  0   1  ↓↑+  .   ×  /  Nth  /  2   2  1   1   1   0    ⎕IO  IOwas     ⍝ Чтобы эта функция работала правильно, ⎕IO необходимо установить в ноль. 

        Фибоначчи  ¨  14      ⍝ В этом утверждении APL говорится: Сгенерируйте последовательность Фибоначчи для каждого (¨) целого числа (йота или ⍳) для целых чисел от 1 до 14. 
  0   1   1   2   3   5   8   13   21   34   55   89   144   233     ⍝ Сгенерированная последовательность, т. е. последовательность чисел Фибоначчи, сгенерированная интерпретатором APL. 

Дальнейшее чтение [ править ]

  • Поливка, Раймонд П.; Пакин, Сандра (1975). APL: язык и его использование . Прентис-Холл. ISBN  978-0-13-038885-8 .
  • Рейтер, Клиффорд А.; Джонс, Уильям Р. (1990). APL с математическим акцентом (1-е изд.). Тейлор и Фрэнсис. ISBN  978-0534128647 .
  • Томпсон, Норман Д.; Поливка, Раймонд П. (2013). APL2 в глубине (Серия Springer по статистике) (Мягкая обложка) (Перепечатка оригинального 1-го изд.). Спрингер. ISBN  978-0387942131 .
  • Гилман, Леонард; Роуз, Аллен Дж. (1976). APL: Интерактивный подход (Мягкая обложка) (3-е изд.). Уайли. ISBN  978-0471093046 .

См. также [ править ]

Ссылки [ править ]

  1. ^ Айверсон, Кеннет Э. (1 января 1962 г.). «Язык программирования». Материалы весенней совместной компьютерной конференции AIEE-IRE '62 (весна), состоявшейся 1–3 мая 1962 г. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 345–351. дои : 10.1145/1460833.1460872 . S2CID   11777029 .
  2. ^ Баронет, Дэн. «Крутые операторы APL» . archive.vector.org.uk . Фото со стока - Журнал Британской ассоциации APL . Проверено 13 января 2015 г.
  3. ^ МикроАПЛ. «Примитивные операторы» . www.microapl.co.uk . МикроАПЛ . Проверено 13 января 2015 г.
  4. ^ МикроАПЛ. «Операторы» . www.microapl.co.uk . МикроАПЛ . Проверено 13 января 2015 г.
  5. ^ Прогопедия. «АПЛ» . progopedia.com . Прогопедия . Проверено 13 января 2015 г.
  6. ^ Диалог. «D-функции и операторы, свободно сгруппированные по категориям» . dfns.dyalog.com . Диалог . Проверено 13 января 2015 г.
  7. ^ ИБМ. «Справочное руководство IBM 5100 APL» (PDF) . bitsavers.trailing-edge.com . ИБМ. Архивировано из оригинала (PDF) 14 января 2015 года . Проверено 14 января 2015 г.
  8. ^ Браун, Джим (1978). «В защиту происхождения индекса 0» . ACM SIGAPL APL Quote Quad . 9 (2): 7. дои : 10.1145/586050.586053 . S2CID   40187000 .
  9. ^ МикроАПЛ. «Руководство по языку APLX» (PDF) . www.microapl.co.uk . MicroAPL — версия 5.0, июнь 2009 г. с. 22 . Проверено 31 января 2015 г.
  10. ^ Бенкард, Дж. Филип (1992). «Вложенные массивы и операторы: некоторые глубокие вопросы». Материалы международной конференции по APL-APL'92 . Том. 23. стр. 7–21. дои : 10.1145/144045.144065 . ISBN  978-0897914772 . S2CID   7760410 . {{cite book}}: |journal= игнорируется ( помогите )
  11. ^ Берри, Пол «APL \ 360 Primer Student Text» , IBM Research, Исследовательский центр Томаса Дж. Уотсона, 1969.
  12. ^ «Трактат» (PDF) . www.cs.utexas.edu . Проверено 10 сентября 2019 г.
  13. ^ Кейсон, Стэн (13 мая 2006 г.). «Библиотека идиом APL2» . www-01.ibm.com . ИБМ . Проверено 1 февраля 2015 г.
  14. ^ «Высокий минус» APL применяется к следующему за ним единственному числу, а монадическая функция минус меняет знак всего массива справа от него.
  15. ^ «Рабочая область — Системные функции» . Microapl.co.uk. п. (внизу веб-страницы) . Проверено 5 ноября 2018 г.
  16. ^ «Справочник по языку APL» (PDF) . Проверено 5 ноября 2018 г.
  17. ^ Диаграмма Юникод «Разное техническое (включая APL)» (PDF) .

Внешние ссылки [ править ]

Общие онлайн-уроки [ править ]

Синтаксические правила [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 61F2A5EFC8585E1E1B9CEFEEDE0C9B1B__1702472820
URL1:https://en.wikipedia.org/wiki/APL_syntax_and_symbols
Заголовок, (Title) документа по адресу, URL1:
APL syntax and symbols - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)