Привет, ребята, добро пожаловать в «Давайте изучим APL, часть 2». В части 1 мы сделали элементарный обзор того, что такое APL и как выполнять в нем основную арифметику. Сегодня мы узнаем некоторые технические термины, еще несколько новых функций и переменных.

Итак, начнем.

Сначала мы рассмотрим несколько общих названий различных «форм» данных в APL:

  1. Скаляр. Скаляр относится к одному значению. например число 12 или буква 'A'
  2. Вектор: вектор - это простой линейный список значений. Например, числа, разделенные пробелами 1 2 3, или строка букв в одинарных кавычках— 'ANIKET'
  3. Матрица: это список с двумя измерениями. Также обычно называется «Стол»
  4. Массив: список значений любого размера.
  5. Куб: трехмерный массив.

Имея это в виду, давайте взглянем на три новых символа:

Первый - ⍴. Если вы используете раскладку клавиатуры, созданную накануне, вы можете получить ее, нажав правый 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

Помните эти моменты при работе с переменной -

  1. Имена переменных чувствительны к регистру. Итак, ANIKET, aniket и Aniket - разные переменные.
  2. Имена переменных должны содержать только буквы и цифры (и некоторые буквы с диакритическими знаками).
  3. Имена переменных могут иметь _, ∆ (Alt + H) и ⍙ (Alt + Shift +.)
  4. Имена переменных не могут начинаться с цифры.

На сегодня все. В следующей части мы увидим еще несколько функций и операторов. Мы направляемся к лучшим частям APL. Быть в курсе.

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .