Типы данных
Фиксированные символыARexx работает с четырьмя типами данных, обобщенно называемых символами:
Фиксированный символ может состоять из цифр 0-9, десятичной точки, экспоненты "Е", а также предшествующего знака + или -., Фиксированные символы - по сути числа, всегда являющиеся константами. Кстати, единственным определением константы в ARexx-e служит то, что она не может стоять в левой части оператора присваивания.
ARexx воспринимает числа, как десятичные. Если мы хотим ввести шестнадцатеричное число, мы должны ввести его, как строку (т.е. заключить в апострофы) и добавить после закрывающего апострофа дескриптор "х" (дескриптором двоичных чисел является "b"):
123 - десятичное число 'CD9'x - шестнадцатеричное число может включать цифры 0-9 и буквы A-F. '110'b - двоичное число состоит только из нулей и единиц.
Простые символыЛюбая последовательность литер (мы сознательно используем синоним слова "символ" - литера, чтобы не было путаницы с символами ARexx-a), заключенная в апострофы или кавычки, считается литеральной строкой, по сути являющейся константой.
Это аналоги простых переменных в других языках программирования. Имя простого символа не может начинаться с числа и иметь где-либо внутри себя точку. Любопытным свойством является то, что если не присваивать никакого значения простому символу, то при первом же его использовании этим значением станет его собственное имя в заглавном регистре. Например:
Стем-символыsay hello ==> HELLO hello = 1 say hello ==> 1 say 'hello' ==> hello (литеральная строка, а не имя простого символа)
Аналог массивов, существующих практически во всех языках программирования. Имя стем-символа (или просто стема) всегда завершается точкой. Пример:
array. = 10
Составные (compound) символыПодобное присвоение приведет к тому, что при считывании любого элемента стема, будет возвращено значение 10.
Эти символы содержат по крайней мере одну точку внутри своего имени. По сути являются обращением к одному из элементов стема. Примеры:
array. = 10 /* Обращение к любому не */ array.1 = 'Первый элемент' /* инициализированному */ /* элементу теперь даст */ /* значение 10 */ say array.1 ==> Первый элемент say array.3 ==> 10 say array.9 ==> 10 this = 5 array.this = 2 say array.this ==> 2 /* Простой символ */ /* является индексом */ say array.1.1 ==> 10 /* Двумерный массив */