Привет, ребята, добро пожаловать в «Давайте изучим APL, часть 2». В части 1 мы сделали элементарный обзор того, что такое APL и как выполнять в нем основную арифметику. Сегодня мы узнаем некоторые технические термины, еще несколько новых функций и переменных.
Итак, начнем.
Сначала мы рассмотрим несколько общих названий различных «форм» данных в APL:
- Скаляр. Скаляр относится к одному значению. например число
12
или буква'A'
- Вектор: вектор - это простой линейный список значений. Например, числа, разделенные пробелами
1 2 3
, или строка букв в одинарных кавычках—'ANIKET'
- Матрица: это список с двумя измерениями. Также обычно называется «Стол»
- Массив: список значений любого размера.
- Куб: трехмерный массив.
Имея это в виду, давайте взглянем на три новых символа:
Первый - ⍴. Если вы используете раскладку клавиатуры, созданную накануне, вы можете получить ее, нажав правый Alt + R
При использовании перед массивом возвращает его размер.
⍴ 1 2 3 3
Легко, правда?
Теперь вы можете вспомнить, что видели, как функции (мы будем использовать слово функция) в части 1 ведут себя по-разному в зависимости от того, где они расположены. Как правило, функции могут иметь два использования -
data <function> data <function> data
При первом использовании функция зажата между двумя аргументами. Это называется диадическим использованием.
Во второй форме функция принимает только одни данные. Это называется монадическим использованием.
В примере ⍴ вы видели монадическое употребление. В диадической форме ⍴ используется для упорядочивания данных в форме или, в более общем смысле, для создания матриц. Это называется изменением формы.
Первый аргумент ⍴ - это форма, которая представляет собой массив, а второй аргумент - это данные, которые должны быть изменены. А пока мы остановимся на создании матриц, поэтому первым аргументом будет массив длиной 2.
3 4 ⍴ 1 1 1 1 1 1 1 1 1 1 1 1 1
Как видите, первый элемент фигуры (3
) обозначает, сколько строк должно быть там, а второй элемент (4
) обозначает, сколько столбцов должно быть там.
Матрица 3 × 4 состоит из 12 элементов, но мы передали только одно значение во втором аргументе, поэтому это единственное значение было повторено для создания матрицы. Передадим разное количество значений.
3 4 ⍴ 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Если мы передаем более одного значения, но меньше, чем количество общих значений, он начнет заполнять матрицу с первой строки, а если данные закончатся, он начнет повторять данные с начала.
Это свойство можно использовать для создания полезных фигур. Например, чтобы создать единичную матрицу четвертого порядка, мы сделаем
4 4 ⍴ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Итак, если мы передадим ровно 12 значений, ничего не повторится
3 4 ⍴ 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12
И если мы передадим более 12 значений
3 4 ⍴ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 2 3 4 5 6 7 8 9 10 11 12
дополнительные услуги будут проигнорированы.
Все вышеперечисленные формы были двухмерными. Но фигура может иметь более двух измерений. Например, трехмерный массив формы 3 3 3 будет массивом из 3 элементов. Каждый элемент сам по себе будет массивом из 3 строк и 3 столбцов.
3 3 3 ⍴ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Здесь пустые строки разделяют подмассивы.
То же самое и с более высокими измерениями. Четырехмерный массив с формой 3 3 3 3 будет массивом из 3 элементов, где каждый элемент будет массивом формы 3 3 3.
На этом пока закончено. К следующему символу!
Далее (максимум). Используйте правый Alt + S, чтобы получить это.
Как видно из названия, в диадическом употреблении он находит максимум двух значений
5 ⌈ 12 12
Если вы передадите два массива, он выполнит поэлементное сравнение и вернет массив с максимальным количеством элементов из обоих массивов.
1 20 59 3 ⌈ 5 10 18 20 5 20 59 20
Здесь он проверяет первый элемент обоих массивов и берет максимум, затем берет второй элемент обоих массивов, берет максимум и так далее.
В монадическом использовании ⌈ работает как «потолочная» функция. Это означает, что он возвращает наименьшее целое число, большее или равное его аргументу. Если передается в массиве, он делает то же самое для каждого элемента.
⌈ 4.5 5 ⌈ 4.5 3.4 ¯6.5 5 4 ¯6
Точно так же, как ⌈, другой - ⌊ (минимум) (Alt + D). ⌊ находит минимум двух значений в диадической форме. При передаче в массиве выполняется поэлементное сравнение. А в монадической форме он работает как «этажная» функция (возвращает наибольшее целое число, меньшее или равное аргументу). Вы можете думать об этом как о противоположности ⌈
5 ⌊ 12 5 1 20 59 3 ⌊ 5 10 18 20 1 10 18 3 ⌊ 4.5 4 ⌊ 4.5 3.4 ¯6.5 4 3 ¯7
Переменные
Как и в других языках программирования, в APL можно создавать переменные и использовать их. Мы используем оператор присваивания ← (Alt + [) для создания переменной. Структура для присвоения переменной
variable_name ← value
Например, если бы мы хотели создать переменную с именем «Аникет» со значением 19, мы бы сделали
Aniket ← 19
Помните, что APL не выдаст никаких результатов. поскольку присвоение не является выражением. Чтобы убедиться, что он назначен -
Aniket 19
Вы можете выполнять всю арифметику, которую вы изучили, с переменными.
Aniket + 1 20 Aniket × 2 38 ÷ Aniket 0.05263157895
Вы также можете присвоить результат операции переменной. Например, это присваивает минимум 5 и 29 переменной a -
a ← 5 ⌊ 29 a 5
Помните эти моменты при работе с переменной -
- Имена переменных чувствительны к регистру. Итак,
ANIKET
,aniket
иAniket
- разные переменные. - Имена переменных должны содержать только буквы и цифры (и некоторые буквы с диакритическими знаками).
- Имена переменных могут иметь _, ∆ (Alt + H) и ⍙ (Alt + Shift +.)
- Имена переменных не могут начинаться с цифры.
На сегодня все. В следующей части мы увидим еще несколько функций и операторов. Мы направляемся к лучшим частям APL. Быть в курсе.
✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .