Axiom Справочник языка

10 · Массивы

Преобразование и обработка массивов

Раздел объединяет встроенные функции, которые копируют, преобразуют, ищут и обрабатывают элементы массивов. Каждая функция имеет собственные формы вызова и результат.

Назначение и условия работы

Здесь описаны отдельные встроенные функции ARRAYCLONE, ARRAYSLICE, ARRAYTAKE, ARRAYSKIP, ARRAYFLATTEN, ARRAYRESHAPE, ARRAYTOSORTED, ARRAYTOREVERSED, ARRAYDISTINCT, ARRAYCONCAT, ARRAYFILL, ARRAYREVERSE, ARRAYSORT, ARRAYCONTAINS, ARRAYINDEXOF, ARRAYLASTINDEXOF, ARRAYCOUNT, ARRAYFINDALL, ARRAYBINARYSEARCH, ARRAYEVERY, ARRAYSOME, ARRAYFILTER, ARRAYMAP, ARRAYREDUCE, ARRAYSUM, ARRAYMIN, ARRAYMAX, ARRAYAVERAGE. Формы ниже относятся к указанным функциям, а не к одной общей конструкции.

В формах вызова обозначение <массив> означает полное массивное выражение: values[], bag.values[], срез или результат функции. Например, ARRAYLENGTH(values[]) читает весь массив, а ARRAYCLONE(values[]) создаёт копию. Скобки вызова встроенной функции остаются круглыми. Операции доступны без графического режима. Обычно требуется выделенный массив, включая выделенный пустой массив. ARRAYLENGTH, ARRAYISALLOCATED, ARRAYRANK и ARRAYCLONE допускают невыделенное состояние. Изменение размера запрещено для представления; изменение содержимого через представление видно в исходном массиве. Копирование создаёт независимое хранилище элементов и всех вложенных изменяемых данных, включая поля TYPE, массивы, словари и множества. Подробнее: копирование записи.

ARRAYCLONE

ARRAYCLONE — встроенная функция языка Axiom, которая создаёт независимую копию видимой части массива.

Синтаксис

ARRAYCLONE(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Сохраняются ранг, тип, видимые границы и состояние выделения. Копирование представления даёт собственное хранилище его видимых элементов. Изменение самого элемента копии не меняет элемент исходного массива. Вложенные поля TYPE, массивы, словари и множества также копируются независимо.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. Невыделенное состояние допустимо. Аргумент должен быть массивом; несовместимое скалярное значение отклоняется при проверке программы.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYCLONE(a[])
b[-1] = 9
PRINT a[-1]
PRINT b[-1]

Ожидаемый вывод:

3
9

ARRAYSLICE

ARRAYSLICE — встроенная функция языка Axiom, которая копирует непрерывный диапазон элементов либо срезов массива.

Синтаксис

ARRAYSLICE(<массив>, <начальный индекс>, <количество>)
ARRAYSLICE(<массив>, <начальный индекс>, <количество>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<начальный индекс>: Целое число INTEGER задаёт первый логический индекс копируемого диапазона.

<количество>: Целое число INTEGER задаёт число элементов или срезов вдоль выбранного измерения.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Количество должно быть неотрицательным. При положительном количестве начальный индекс и весь диапазон должны находиться внутри выбранного измерения. Для ранга 1 результат всегда имеет границы 1 TO N, включая явное измерение 1. Для ранга 2 и выше границы выбранного измерения начинаются с заданного начального индекса; другие границы сохраняются. При нулевом количестве результат пустой независимо от ранга и начального индекса: выбранное измерение всегда получает канонические границы 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для отрицательного количества или номера измерения вне ранга. При положительном количестве диапазон вне исходных границ также вызывает MB3007.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYSLICE(a[], 0, 2)
PRINT LBOUND(b[])
PRINT b[1]
PRINT b[2]

Ожидаемый вывод:

1
1
3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM part[,] AS INTEGER
part[] = ARRAYSLICE(board[], 0, 1, ROW)
PRINT LBOUND(part[], ROW)
PRINT part[0, 3]

Ожидаемый вывод:

0
2

ARRAYTAKE

ARRAYTAKE — встроенная функция языка Axiom, которая копирует начальную часть массива по указанному количеству.

Синтаксис

ARRAYTAKE(<массив>, <количество>)
ARRAYTAKE(<массив>, <количество>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<количество>: Целое число INTEGER задаёт число элементов или срезов вдоль выбранного измерения.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Количество должно быть неотрицательным; если оно больше длины выбранного измерения, копируются все его элементы. Для ранга 1 границы результата равны 1 TO N. Для ранга 2 и выше сохраняется нижняя граница выбранного измерения, а верхняя ограничивается числом взятых срезов. При нулевом количестве выбранное измерение получает канонические границы 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для отрицательного количества или номера измерения вне ранга.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYTAKE(a[], 2)
PRINT b[1]
PRINT b[2]

Ожидаемый вывод:

3
1

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM part[,] AS INTEGER
part[] = ARRAYTAKE(board[], 1, ROW)
PRINT LBOUND(part[], ROW)
PRINT UBOUND(part[], ROW)
PRINT part[-1, 3]

Ожидаемый вывод:

-1
-1
4

ARRAYSKIP

ARRAYSKIP — встроенная функция языка Axiom, которая копирует остаток массива после пропуска указанного количества.

Синтаксис

ARRAYSKIP(<массив>, <количество>)
ARRAYSKIP(<массив>, <количество>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<количество>: Целое число INTEGER задаёт число элементов или срезов вдоль выбранного измерения.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Количество должно быть неотрицательным. Если пропускается всё измерение, результат пустой. Для ранга 1 результат имеет границы 1 TO N. Для ранга 2 и выше нижняя граница выбранного измерения сдвигается на число пропущенных срезов, верхняя сохраняется. Если пропускается всё измерение, оно получает канонические границы 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для отрицательного количества или номера измерения вне ранга.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYSKIP(a[], 2)
PRINT b[1]

Ожидаемый вывод:

3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM part[,] AS INTEGER
part[] = ARRAYSKIP(board[], 1, ROW)
PRINT LBOUND(part[], ROW)
PRINT part[0, 3]

Ожидаемый вывод:

0
2

ARRAYFLATTEN

ARRAYFLATTEN — встроенная функция языка Axiom, которая копирует все видимые элементы в одномерный массив.

Синтаксис

ARRAYFLATTEN(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Возвращается массив исходного типа элементов ранга 1 с границами 1 TO N; пустой результат имеет границы 1 TO 0. Обход идёт по возрастанию индексов, последнее измерение меняется быстрее первого.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYFLATTEN(a[])
PRINT b[1]
PRINT b[2]

Ожидаемый вывод:

3
1

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM flat[] AS INTEGER
flat[] = ARRAYFLATTEN(board[])
PRINT flat[1]
PRINT flat[2]
PRINT flat[3]
PRINT flat[4]

Ожидаемый вывод:

4
1
2
3

ARRAYRESHAPE

ARRAYRESHAPE — встроенная функция языка Axiom, которая копирует последовательность элементов в новую форму, заданную массивом образца.

Синтаксис

ARRAYRESHAPE(<источник>, <образец>)

Аргументы

<источник>: Выделенный массив задаёт последовательность переносимых элементов.

<образец>: Выделенный массив того же типа элементов задаёт ранг и границы результата; его элементы не читаются.

Действие, результат и ограничения

Тип элементов источника и образца должен совпадать; их ранги могут отличаться. Оба массива должны быть выделены и иметь одинаковое число видимых элементов. Значения образца не используются; результат получает его ранг и видимые границы. Исходная последовательность переносится в порядке обхода, в котором последнее измерение меняется быстрее первого.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если источник или образец не выделен. MB2003 означает несовпадающие типы элементов; MB3007 — несовпадающее число видимых элементов.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM template[1 TO 1, 4 TO 6] AS INTEGER
DIM b[,] AS INTEGER
b[] = ARRAYRESHAPE(a[], template[])
PRINT b[1, 4]
PRINT b[1, 5]

Ожидаемый вывод:

3
1

ARRAYTOSORTED

ARRAYTOSORTED — встроенная функция языка Axiom, которая возвращает отсортированную копию массива.

Синтаксис

ARRAYTOSORTED(<массив>)
ARRAYTOSORTED(<массив>, <измерение>)
ARRAYTOSORTED(<массив>, <поле>)
ARRAYTOSORTED(<массив>, <поле>, STEP 1)
ARRAYTOSORTED(<массив>, <поле>, STEP -1)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

<поле>: Строковая константа называет поле записи TYPE, по которому упорядочиваются записи. Принимается непосредственный литерал и строковая константа CONST, значение которой известно до выполнения; вычисляемое строковое выражение не подходит, а круглые скобки вокруг литерала контекст не прерывают. Форма с полем принимает только одномерный массив записей. Имя поля проверяется при разборе программы, поэтому опечатка отклоняется до запуска. Поле должно быть числовым, строковым или временным; массивное поле не упорядочивается.

STEP 1 и STEP -1: Необязательное направление сортировки по полю. Отсутствие этого аргумента и STEP 1 дают возрастание, STEP -1 даёт убывание. Другие значения отклоняются при разборе программы.

Действие, результат и ограничения

Упорядоченное сравнение поддерживают INTEGER, LONG, DOUBLE, DECIMAL, STRING, DATE, TIME и DATETIME. Сортировка устойчивая: равные элементы и равные ключи сохраняют прежний порядок. Все границы сохраняются. У многомерного массива сортируется каждая линия выбранного измерения независимо; исходный массив не меняется.

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

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для номера измерения вне ранга. Неупорядочиваемый тип элементов отклоняется при проверке программы с MB2003. MB2057 означает, что форма с полем применена к массиву не из записей, к многомерному массиву, что имя поля не является строковой константой, известной при проверке программы, поле отсутствует или не подлежит упорядочиванию. MB2058 означает недопустимое направление сортировки, а также STEP вне ARRAYSORT и ARRAYTOSORTED.

Форма с полем принимает непосредственный литерал и строковую константу CONST, значение которой известно при проверке программы; скобки вокруг литерала контекст не прерывают. Подробный разбор этого договора и пример с константным именем поля приведены в описании ARRAYSORT.

Строковая константа может получать значение от другой уже известной константы, в том числе экспортированной через PUBLIC CONST. Например, после объявлений CONST originalField AS STRING = "Price" и CONST selectedField AS STRING = originalField вызов ARRAYSORT(basket[], selectedField) сортирует записи по полю Price. Вычисляемое во время выполнения имя поля по-прежнему не допускается. Запускаемый пример: сортировка через цепочку констант.

Сортировка по полю записи:

TYPE Product
    Name AS STRING
    Price AS INTEGER
END TYPE
DIM basket[1 TO 3] AS Product
basket[1] = Product("яблоко", 30)
basket[2] = Product("апельсин", 40)
basket[3] = Product("банан", 20)
DIM sorted[] AS Product
sorted[] = ARRAYTOSORTED(basket[], "Price", STEP -1)
PRINT sorted[1].Name; " "; sorted[1].Price
PRINT sorted[2].Name; " "; sorted[2].Price
PRINT sorted[3].Name; " "; sorted[3].Price

Ожидаемый вывод:

апельсин 40
яблоко 30
банан 20

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYTOSORTED(a[])
PRINT LBOUND(b[])
PRINT b[-1]
PRINT a[-1]

Ожидаемый вывод:

-1
1
3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM sorted[,] AS INTEGER
sorted[] = ARRAYTOSORTED(board[], COLUMN)
PRINT sorted[-1, 3]
PRINT sorted[-1, 4]
PRINT board[-1, 3]

Ожидаемый вывод:

1
4
4

ARRAYTOREVERSED

ARRAYTOREVERSED — встроенная функция языка Axiom, которая возвращает копию с обратным порядком элементов.

Синтаксис

ARRAYTOREVERSED(<массив>)
ARRAYTOREVERSED(<массив>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Для ранга 1 результат всегда получает границы 1 TO N, даже при явном измерении 1. Для ранга 2 и выше видимые границы сохраняются; меняется направление каждой линии выбранного измерения. Исходный массив не меняется.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для номера измерения вне ранга.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYTOREVERSED(a[], 1)
PRINT LBOUND(b[])
PRINT UBOUND(b[])
PRINT b[1]

Ожидаемый вывод:

1
3
3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM reversed[,] AS INTEGER
reversed[] = ARRAYTOREVERSED(board[], COLUMN)
PRINT LBOUND(reversed[], ROW)
PRINT LBOUND(reversed[], COLUMN)
PRINT reversed[-1, 3]
PRINT reversed[0, 3]

Ожидаемый вывод:

-1
3
1
3

ARRAYDISTINCT

ARRAYDISTINCT — встроенная функция языка Axiom, которая копирует первые появления различных значений в одномерный массив.

Синтаксис

ARRAYDISTINCT(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Возвращается массив исходного типа элементов ранга 1 с границами 1 TO N. Порядок первых появлений сохраняется; сравнение следует обычному равенству значений Axiom. Пустой результат имеет границы 1 TO 0.

Для элементов UTCDATETIME совпадение определяется полным значением момента, включая дробные секунды. Порядок результата соответствует первым вхождениям в исходной видимой области, а не хронологическому порядку. Исходный массив не изменяется. Например, последовательность моментов с долями .0000002Z, .0000001Z, .0000002Z при одинаковой дате и времени даёт два элемента: сначала .0000002Z, затем .0000001Z.

Элементами могут быть и записи TYPE, если весь граф полей типа поддерживает структурное равенство: поля сравниваются попарно в порядке объявления, включая вложенные записи, строки и временные поля. Такие записи обрабатываются тем же согласованным хешированием, что и простые значения, поэтому удаление повторов на больших массивах записей не требует попарного сравнения со всеми уже найденными. Хеш не запоминается в записи: запись изменяема, поэтому хеш вычисляется заново при каждом обращении. Запись с массивным полем не сворачивается ни с какой другой записью: массивные поля не участвуют в структурном равенстве, поэтому две записи с массивными полями всегда считаются разными.

Повторяющаяся запись убирается, а запись с другим значением поля остаётся:

TYPE Product
    Name AS STRING
    Price AS INTEGER
END TYPE
DIM basket[1 TO 3] AS Product
basket[1] = Product("яблоко", 30)
basket[2] = Product("банан", 20)
basket[3] = Product("яблоко", 30)
DIM unique[] AS Product
unique[] = ARRAYDISTINCT(basket[])
PRINT ARRAYLENGTH(unique[])
PRINT unique[1].Name; " "; unique[1].Price
PRINT unique[2].Name; " "; unique[2].Price

Ожидаемый вывод:

2
яблоко 30
банан 20

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYDISTINCT(a[])
PRINT ARRAYLENGTH(b[])
PRINT b[1]
PRINT b[2]

Ожидаемый вывод:

2
3
1

ARRAYCONCAT

ARRAYCONCAT — встроенная функция языка Axiom, которая объединяет содержимое двух массивов в новую копию.

Синтаксис

ARRAYCONCAT(<левый массив>, <правый массив>)
ARRAYCONCAT(<левый массив>, <правый массив>, <измерение>)

Аргументы

<левый массив>: Массив задаёт первую часть объединённого результата.

<правый массив>: Массив того же типа и ранга задаёт вторую часть объединённого результата.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Тип элементов и ранг обоих массивов должны совпадать. Для ранга 1 два непустых массива дают границы 1 TO N; если один пуст, возвращается копия другого с его границами. Для ранга 2 и выше нижняя граница выбранного измерения берётся слева, верхняя определяется суммарной длиной; границы остальных измерений обязаны совпадать. Если выбранное измерение одного массива пусто, возвращается копия второго с его видимыми границами.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если левый или правый массив не выделен. MB2003 означает разные типы элементов или ранг; несовпадение рангов сообщается отдельным текстом о правом и левом массиве. MB2004 означает отсутствие обязательного измерения для ранга 2 и выше. MB3007 возникает для недопустимого измерения, несовпадения границ невыбранных измерений или верхней границы результата вне INTEGER.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM b[] AS INTEGER
b[] = ARRAYCONCAT(a[], a[])
PRINT LBOUND(b[])
PRINT ARRAYLENGTH(b[])

Ожидаемый вывод:

1
6

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM part[,] AS INTEGER
part[] = ARRAYCONCAT(board[], board[], ROW)
PRINT LBOUND(part[], ROW)
PRINT UBOUND(part[], ROW)
PRINT part[1, 3]

Ожидаемый вывод:

-1
2
4

ARRAYFILL

ARRAYFILL — встроенная функция языка Axiom, которая заполняет видимые элементы массива одним значением.

Синтаксис

ARRAYFILL(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Записываемое значение должно иметь тип элемента массива либо допускать преобразование к этому типу; оно устанавливается для каждого видимого элемента.

Действие, результат и ограничения

Значение совместимо с типом элемента. Функция изменяет исходный массив, включая доступные элементы представления, и не возвращает значения. Границы не меняются. Пустой выделенный массив допустим.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
ARRAYFILL(a[], 8)
PRINT a[-1]
PRINT a[1]

Ожидаемый вывод:

8
8

ARRAYREVERSE

ARRAYREVERSE — встроенная функция языка Axiom, которая меняет порядок элементов исходного массива на обратный.

Синтаксис

ARRAYREVERSE(<массив>)
ARRAYREVERSE(<массив>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Функция меняет исходные элементы, включая элементы представления, сохраняет границы и не возвращает значения. У многомерного массива каждая линия выбранного измерения разворачивается независимо. Пустой выделенный массив допустим.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для номера измерения вне ранга.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
a[1] = 7
ARRAYREVERSE(a[])
PRINT a[-1]
PRINT a[1]

Ожидаемый вывод:

7
3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
ARRAYREVERSE(board[], COLUMN)
PRINT board[-1, 3]
PRINT board[-1, 4]
PRINT board[0, 3]

Ожидаемый вывод:

1
4
3

ARRAYSORT

ARRAYSORT — встроенная функция языка Axiom, которая сортирует элементы исходного массива по возрастанию.

Синтаксис

ARRAYSORT(<массив>)
ARRAYSORT(<массив>, <измерение>)
ARRAYSORT(<массив>, <поле>)
ARRAYSORT(<массив>, <поле>, STEP 1)
ARRAYSORT(<массив>, <поле>, STEP -1)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

<поле>: Строковая константа называет поле записи TYPE, по которому упорядочиваются записи. Принимается непосредственный литерал и строковая константа CONST, значение которой известно до выполнения; вычисляемое строковое выражение не подходит, а круглые скобки вокруг литерала контекст не прерывают. Форма с полем принимает только одномерный массив записей. Имя поля проверяется при разборе программы, поэтому опечатка отклоняется до запуска. Поле должно быть числовым, строковым или временным; массивное поле не упорядочивается.

STEP 1 и STEP -1: Необязательное направление сортировки по полю. Отсутствие этого аргумента и STEP 1 дают возрастание, STEP -1 даёт убывание. Другие значения отклоняются при разборе программы.

Действие, результат и ограничения

Функция меняет исходные элементы, сохраняет границы и не возвращает значения. Упорядоченное сравнение поддерживают INTEGER, LONG, DOUBLE, DECIMAL, STRING, DATE, TIME и DATETIME. Сортировка устойчивая; многомерные линии выбранного измерения сортируются независимо. Пустой выделенный массив допустим.

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

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного номера измерения у массива ранга 2 и выше. MB3007 возникает для номера измерения вне ранга. Неупорядочиваемый тип элементов отклоняется при проверке программы с MB2003. MB2057 означает, что форма с полем применена к массиву не из записей, к многомерному массиву, что имя поля не является строковой константой, известной при проверке программы, поле отсутствует или не подлежит упорядочиванию. MB2058 означает недопустимое направление сортировки, а также STEP вне ARRAYSORT и ARRAYTOSORTED.

Имя поля можно задать строковой константой. Значение известно при проверке программы, поэтому опечатка по-прежнему обнаруживается до запуска:

TYPE Product
    Name AS STRING
    Price AS INTEGER
END TYPE
CONST priceField AS STRING = "Price"
DIM basket[1 TO 2] AS Product
basket[1] = Product("яблоко", 30)
basket[2] = Product("банан", 20)
ARRAYSORT(basket[], priceField)
PRINT basket[1].Price

Ожидаемый вывод: 20. Скобки вокруг литерала действуют так же: ARRAYSORT(basket[], ("Name")) допустим.

Сортировка самой корзины по названию:

TYPE Product
    Name AS STRING
    Price AS INTEGER
END TYPE
DIM basket[1 TO 3] AS Product
basket[1] = Product("яблоко", 30)
basket[2] = Product("апельсин", 40)
basket[3] = Product("банан", 20)
ARRAYSORT(basket[], "Name", STEP 1)
PRINT basket[1].Name
PRINT basket[2].Name
PRINT basket[3].Name

Ожидаемый вывод:

апельсин
банан
яблоко

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
ARRAYSORT(a[])
PRINT a[-1]
PRINT a[1]

Ожидаемый вывод:

1
3

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
ARRAYSORT(board[], COLUMN)
PRINT board[-1, 3]
PRINT board[-1, 4]
PRINT board[0, 3]

Ожидаемый вывод:

1
4
2

ARRAYCONTAINS

ARRAYCONTAINS — встроенная функция языка Axiom, которая проверяет наличие значения среди видимых элементов массива.

Синтаксис

ARRAYCONTAINS(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

Действие, результат и ограничения

Результат BOOLEAN. Совпадение определяется обычным равенством Axiom. Пустой выделенный массив даёт FALSE.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYCONTAINS(a[], 3)
PRINT ARRAYCONTAINS(a[], 8)

Ожидаемый вывод:

TRUE
FALSE

ARRAYINDEXOF

ARRAYINDEXOF — встроенная функция языка Axiom, которая находит первое совпадение значения в массиве.

Синтаксис

ARRAYINDEXOF(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

Действие, результат и ограничения

Для ранга 1 возвращается INTEGER: первый логический индекс совпадения или LBOUND(массив) - 1 при отсутствии. Для ранга 2 и выше возвращается INTEGER[] с координатами в порядке измерений; отсутствие даёт пустой массив 1 TO 0. Первое совпадение определяется обходом по возрастанию индексов с самым быстрым последним измерением.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYINDEXOF(a[], 3)
PRINT ARRAYINDEXOF(a[], 8)

Ожидаемый вывод:

-1
-2

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM coordinates[] AS INTEGER
coordinates[] = ARRAYINDEXOF(board[], 3)
PRINT coordinates[1]
PRINT coordinates[2]
coordinates[] = ARRAYINDEXOF(board[], 99)
PRINT ARRAYLENGTH(coordinates[])

Ожидаемый вывод:

0
4
0

ARRAYLASTINDEXOF

ARRAYLASTINDEXOF — встроенная функция языка Axiom, которая находит последнее совпадение значения в массиве.

Синтаксис

ARRAYLASTINDEXOF(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

Действие, результат и ограничения

Для ранга 1 возвращается INTEGER: последний логический индекс совпадения или LBOUND(массив) - 1 при отсутствии. Для ранга 2 и выше возвращается INTEGER[] с координатами последнего совпадения в порядке измерений; отсутствие даёт пустой массив 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYLASTINDEXOF(a[], 3)

Ожидаемый вывод:

1

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM coordinates[] AS INTEGER
coordinates[] = ARRAYLASTINDEXOF(board[], 3)
PRINT coordinates[1]
PRINT coordinates[2]

Ожидаемый вывод:

0
4

ARRAYCOUNT

ARRAYCOUNT — встроенная функция языка Axiom, которая подсчитывает совпадения значения в массиве.

Синтаксис

ARRAYCOUNT(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

Действие, результат и ограничения

Результат INTEGER содержит количество равных значений во всей видимой форме. Пустой выделенный массив даёт 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYCOUNT(a[], 3)

Ожидаемый вывод:

2

ARRAYFINDALL

ARRAYFINDALL — встроенная функция языка Axiom, которая возвращает индексы всех совпадений значения в массиве.

Синтаксис

ARRAYFINDALL(<массив>, <значение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

Действие, результат и ограничения

Для ранга 1 возвращается INTEGER[] с границами 1 TO N; значения элементов являются логическими индексами исходного массива. Для ранга 2 и выше возвращается INTEGER[,] с границами (1 TO число совпадений, 1 TO ранг); строки содержат координаты. Порядок соответствует обходу исходного массива. При отсутствии совпадений первое измерение равно 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
DIM indices[] AS INTEGER
indices[] = ARRAYFINDALL(a[], 3)
PRINT indices[1]
PRINT indices[2]

Ожидаемый вывод:

-1
1

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
DIM coordinates[,] AS INTEGER
coordinates[] = ARRAYFINDALL(board[], 3)
PRINT coordinates[1, 1]
PRINT coordinates[1, 2]

Ожидаемый вывод:

0
4

ARRAYBINARYSEARCH

ARRAYBINARYSEARCH — встроенная функция языка Axiom, которая ищет первое совпадение двоичным поиском в отсортированном массиве.

Синтаксис

ARRAYBINARYSEARCH(<массив>, <значение>)
ARRAYBINARYSEARCH(<массив>, <значение>, <измерение>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<значение>: Искомое значение должно иметь тип элемента массива либо допускать преобразование к этому типу. Совпадение проверяется среди видимых элементов.

<измерение>: Целое число INTEGER выбирает измерение от 1 до ранга включительно. ROW равно 1, COLUMN равно 2. Для преобразований массива ранга 2 и выше этот аргумент обязателен.

Действие, результат и ограничения

Массив нужно заранее отсортировать по возрастанию тем же сравнением; функция порядок не проверяет. Для ранга 1 возвращается первый индекс совпадения или LBOUND(массив) - 1. Для ранга 2 и выше поиск выполняется вдоль каждой линии явно выбранного измерения и возвращает INTEGER[] координат первого найденного совпадения; отсутствие даёт 1 TO 0. Упорядоченное сравнение поддерживают INTEGER, LONG, DOUBLE, DECIMAL, STRING, DATE, TIME и DATETIME.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2004 означает отсутствие обязательного измерения для ранга 2 и выше. MB3007 возникает для недопустимого номера измерения; неупорядочиваемый тип элементов отклоняется с MB2003. Несортированный вход не проверяется и не обязан вызывать диагностику.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
ARRAYSORT(a[])
PRINT ARRAYBINARYSEARCH(a[], 3)
PRINT ARRAYBINARYSEARCH(a[], 8)

Ожидаемый вывод:

0
-2

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
ARRAYSORT(board[], COLUMN)
DIM coordinates[] AS INTEGER
coordinates[] = ARRAYBINARYSEARCH(board[], 3, COLUMN)
PRINT coordinates[1]
PRINT coordinates[2]

Ожидаемый вывод:

0
4

ARRAYEVERY

ARRAYEVERY — встроенная функция языка Axiom, которая проверяет, удовлетворяют ли все элементы пользовательскому условию.

Синтаксис

ARRAYEVERY(<массив>, <условие>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<условие>: Значение функции принимает элемент и возвращает BOOLEAN; TRUE означает выполнение условия.

Действие, результат и ограничения

Условие имеет точную сигнатуру FUNCTION(T) AS BOOLEAN, где T — тип элемента. Обработка прекращается после первого FALSE. Пустой выделенный массив даёт TRUE. Ошибка функции обработки передаётся вызывающему коду.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2003 означает несовместимую сигнатуру функции обработки. Параметры BYREF в функциональном значении запрещены с MB2029. Пустое значение функции обработки вызывает MB3009; ошибки внутри вызова передаются с собственными кодами.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
FUNCTION Positive(x AS INTEGER) AS BOOLEAN
    RETURN x > 0
END FUNCTION
PRINT ARRAYEVERY(a[], Positive)

Ожидаемый вывод:

TRUE

ARRAYSOME

ARRAYSOME — встроенная функция языка Axiom, которая проверяет, удовлетворяет ли хотя бы один элемент пользовательскому условию.

Синтаксис

ARRAYSOME(<массив>, <условие>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<условие>: Значение функции принимает элемент и возвращает BOOLEAN; TRUE означает выполнение условия.

Действие, результат и ограничения

Условие имеет точную сигнатуру FUNCTION(T) AS BOOLEAN. Обработка прекращается после первого TRUE. Пустой выделенный массив даёт FALSE. Ошибка функции обработки передаётся вызывающему коду.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2003 означает несовместимую сигнатуру функции обработки. Параметры BYREF в функциональном значении запрещены с MB2029. Пустое значение функции обработки вызывает MB3009; ошибки внутри вызова передаются с собственными кодами.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
FUNCTION Large(x AS INTEGER) AS BOOLEAN
    RETURN x > 2
END FUNCTION
PRINT ARRAYSOME(a[], Large)

Ожидаемый вывод:

TRUE

ARRAYFILTER

ARRAYFILTER — встроенная функция языка Axiom, которая копирует элементы, удовлетворяющие пользовательскому условию.

Синтаксис

ARRAYFILTER(<массив>, <условие>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<условие>: Значение функции принимает элемент и возвращает BOOLEAN; TRUE означает выполнение условия.

Действие, результат и ограничения

Условие имеет точную сигнатуру FUNCTION(T) AS BOOLEAN. Совпавшие элементы сохраняют порядок обхода. Результат всегда имеет ранг 1, исходный тип элементов и границы 1 TO N; пустой результат — 1 TO 0.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2003 означает несовместимую сигнатуру функции обработки. Параметры BYREF в функциональном значении запрещены с MB2029. Пустое значение функции обработки вызывает MB3009; ошибки внутри вызова передаются с собственными кодами.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
FUNCTION Large(x AS INTEGER) AS BOOLEAN
    RETURN x > 2
END FUNCTION
DIM b[] AS INTEGER
b[] = ARRAYFILTER(a[], Large)
PRINT ARRAYLENGTH(b[])
PRINT b[1]

Ожидаемый вывод:

2
3

ARRAYMAP

ARRAYMAP — встроенная функция языка Axiom, которая преобразует каждый элемент пользовательской функцией и возвращает новый массив.

Синтаксис

ARRAYMAP(<массив>, <преобразование>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<преобразование>: Значение функции принимает элемент и возвращает значение нового элемента.

Действие, результат и ограничения

Преобразование имеет точную сигнатуру FUNCTION(T) AS U. Тип U становится типом элементов результата и не может быть массивным. Результат сохраняет ранг и видимые границы источника, в том числе для ранга 1. Ошибки функции обработки можно перехватить внешним TRY.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2003 означает несовместимую сигнатуру функции обработки. Параметры BYREF в функциональном значении запрещены с MB2029. Пустое значение функции обработки вызывает MB3009; ошибки внутри вызова передаются с собственными кодами. Результат преобразования массивного типа отклоняется при проверке с MB2003.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
FUNCTION Twice(x AS INTEGER) AS INTEGER
    RETURN 2 * x
END FUNCTION
DIM b[] AS INTEGER
b[] = ARRAYMAP(a[], Twice)
PRINT LBOUND(b[])
PRINT b[-1]

Ожидаемый вывод:

-1
6

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
FUNCTION AsText(value AS INTEGER) AS STRING
    RETURN STR(value)
END FUNCTION
DIM converted[,] AS STRING
converted[] = ARRAYMAP(board[], AsText)
PRINT LBOUND(converted[], ROW)
PRINT LBOUND(converted[], COLUMN)
PRINT converted[0, 4]

Ожидаемый вывод:

-1
3
3

ARRAYREDUCE

ARRAYREDUCE — встроенная функция языка Axiom, которая последовательно объединяет элементы с накопленным значением пользовательской функцией.

Синтаксис

ARRAYREDUCE(<массив>, <начальное значение>, <свёртка>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

<начальное значение>: Значение типа накопителя A начинает свёртку до первого элемента.

<свёртка>: Значение функции принимает текущий накопитель и элемент и возвращает следующий накопитель того же типа.

Действие, результат и ограничения

Свёртка имеет точную сигнатуру FUNCTION(A, T) AS A; A — тип накопленного результата, T — тип элементов. Начальное значение приводится к A. Функция вызывается для каждого элемента по порядку обхода. Пустой выделенный массив возвращает начальное значение.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. MB2003 означает несовместимую сигнатуру функции обработки. Параметры BYREF в функциональном значении запрещены с MB2029. Пустое значение функции обработки вызывает MB3009; ошибки внутри вызова передаются с собственными кодами.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
FUNCTION Add(acc AS INTEGER, x AS INTEGER) AS INTEGER
    RETURN acc + x
END FUNCTION
PRINT ARRAYREDUCE(a[], 10, Add)

Ожидаемый вывод:

17

Пример многомерной формы

DIM board[-1 TO 0, 3 TO 4] AS INTEGER
board[-1, 3] = 4
board[-1, 4] = 1
board[0, 3] = 2
board[0, 4] = 3
FUNCTION AccumulateText(acc AS STRING, value AS INTEGER) AS STRING
    RETURN acc + STR(value)
END FUNCTION
PRINT ARRAYREDUCE(board[], "", AccumulateText)

Ожидаемый вывод:

4123

ARRAYSUM

ARRAYSUM — встроенная функция языка Axiom, которая возвращает сумму числовых элементов массива.

Синтаксис

ARRAYSUM(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Требуется непустой числовой массив любого ранга. Результат имеет тип элементов. Переполнение INTEGER, LONG, DECIMAL или бесконечный или нечисловой результат DOUBLE вызывает MB3008. Суммируются все видимые элементы.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. Недопустимый тип элемента отклоняется при проверке программы с MB2003; MB3007 возникает для пустого массива. Переполнение результата вызывает MB3008.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYSUM(a[])

Ожидаемый вывод:

7

ARRAYMIN

ARRAYMIN — встроенная функция языка Axiom, которая возвращает наименьшее значение массива.

Синтаксис

ARRAYMIN(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Требуется непустой числовой, строковый или временной массив любого ранга. Результат имеет тип элементов. Строки сравниваются по значениям единиц UTF-16 с учётом регистра, независимо от языковой культуры. Элементы DATE сравниваются по календарю, TIME — внутри суток, DATETIME — по дате и времени суток вместе с долями секунды; перевод в строки не выполняется, поэтому порядок совпадает с обычным оператором сравнения. Смешение временных видов в одном массиве невозможно: тип элементов задаётся объявлением.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. Недопустимый тип элемента отклоняется при проверке программы с MB2003; MB3007 возникает для пустого массива.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYMIN(a[])

Ожидаемый вывод:

1

ARRAYMAX

ARRAYMAX — встроенная функция языка Axiom, которая возвращает наибольшее значение массива.

Синтаксис

ARRAYMAX(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Требуется непустой числовой, строковый или временной массив любого ранга. Результат имеет тип элементов. Строки сравниваются по значениям единиц UTF-16 с учётом регистра, независимо от языковой культуры. Элементы DATE сравниваются по календарю, TIME — внутри суток, DATETIME — по дате и времени суток вместе с долями секунды; перевод в строки не выполняется, поэтому порядок совпадает с обычным оператором сравнения. Смешение временных видов в одном массиве невозможно: тип элементов задаётся объявлением.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. Недопустимый тип элемента отклоняется при проверке программы с MB2003; MB3007 возникает для пустого массива.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYMAX(a[])

Ожидаемый вывод:

3

ARRAYAVERAGE

ARRAYAVERAGE — встроенная функция языка Axiom, которая возвращает среднее арифметическое числовых элементов массива.

Синтаксис

ARRAYAVERAGE(<массив>)

Аргументы

<массив>: Массив ранга 1 или выше задаёт видимую область обработки. Все элементы имеют тип, установленный при объявлении массива.

Действие, результат и ограничения

Требуется непустой числовой массив любого ранга. Результат всегда DOUBLE. Значения сначала преобразуются в DOUBLE; их точная сумма делится на число элементов с одним окончательным округлением к ближайшему чётному. Переполнение результата вызывает MB3008.

Диагностика

MB2004 означает неверное число аргументов; MB2003 — несовместимые типы. MB3005 возникает, если массив не выделен. Недопустимый тип элемента отклоняется при проверке программы с MB2003; MB3007 возникает для пустого массива. Переполнение результата вызывает MB3008.

Пример

DIM a[-1 TO 1] AS INTEGER
a[-1] = 3
a[0] = 1
a[1] = 3
PRINT ARRAYAVERAGE(a[]) = 7 / 3

Ожидаемый вывод:

TRUE

Форма источника

Ранг и границы исходного массива описаны в функциях сведений о форме.

Запускаемые примеры

Ранг и границы

См. также

Массивы · Представления · Диагностика массивов · FUNCTION