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
9ARRAYSLICE
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
2ARRAYTAKE
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
4ARRAYSKIP
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
2ARRAYFLATTEN
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
3ARRAYRESHAPE
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
1ARRAYTOSORTED
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
4ARRAYTOREVERSED
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
3ARRAYDISTINCT
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
1ARRAYCONCAT
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
4ARRAYFILL
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
8ARRAYREVERSE
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
3ARRAYSORT
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
2ARRAYCONTAINS
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
FALSEARRAYINDEXOF
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
0ARRAYLASTINDEXOF
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
4ARRAYCOUNT
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)Ожидаемый вывод:
2ARRAYFINDALL
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
4ARRAYBINARYSEARCH
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
4ARRAYEVERY
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)Ожидаемый вывод:
TRUEARRAYSOME
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)Ожидаемый вывод:
TRUEARRAYFILTER
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
3ARRAYMAP
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
3ARRAYREDUCE
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)Ожидаемый вывод:
4123ARRAYSUM
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[])Ожидаемый вывод:
7ARRAYMIN
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[])Ожидаемый вывод:
1ARRAYMAX
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[])Ожидаемый вывод:
3ARRAYAVERAGE
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Форма источника
Ранг и границы исходного массива описаны в функциях сведений о форме.