w = not {1, 5, -2, 0, 0} -- w равно {0, 0, 0, 1, 1}
w = {1, 2, 3} = {1, 2, 4} -- w равно {1, 1, 0}
-- обратите внимание, что первый символ '=' - это команда присваивания,
-- а второй символ '=' - это оператор сравнения, проверяющий равенство
-- соответствующих элементов рядов попарно с формированием ряда результатов
-- сравнения, полученных для каждой из пар элементов
Примечание:В вопросе сравнения рядов Euphoria имеется одна не вполне и не сразу заметная тонкость. Когда вы хотите сравнить две строки (или два других ряда), здесь, в отличие от некоторых других языков, неследует использовать оператор '=':
if "APPLE" = "ORANGE" then -- ОШИБКА!
В выражении, стоящем после команды "if" (если), символ '=' трактуется как бинарный оператор (сравнения), подобно другим бинарным операторам вроде '+', '*' и т.д., следовательно, он применяется к соответствующим парам элементов рядов, и эти ряды должны иметь одинаковую длину. Когда условие равенства длин операндов соблюдено, формируется ряд результатов сравнения, состоящий из нулей и единиц, но когда длины не равны, вы получите сообщение об ошибке в вашей программе. С другой стороны, команда "if" ожидает результат вычисления выражения, подаваемого в эту команду, в виде атома, а не ряда, то есть, и при равенстве длин рядов вы получите сообщение об ошибке в вашей программе. Для получения результата сравнения рядов в виде интегральной (число), а не поэлементной (ряд), характеристики, необходимо использовать встроенную функцию equal() (равно):
if equal("APPLE", "ORANGE") then -- ПРАВИЛЬНО
В общем-то, для несколько более полного сравнения рядов имеется ещё и встроенная функция compare() (сравнить):
if compare("APPLE", "ORANGE") = 0 then -- ПРАВИЛЬНО
Вы можете использовать compare() также и для других сравнений:
if compare("APPLE", "ORANGE") < 0 then -- ПРАВИЛЬНО
-- здесь "APPLE" меньше чем "ORANGE",
-- так как длина второго ряда больше (истина, 1)
2.2.5 Индексирование рядов
Единственный элемент ряда может быть отобран путём задания номера элемента ряда (индекса элемента) в квадратных скобках. Номера элементов (индексы) начинаются с 1. Не-целые индексы также допускаются, но при этом округляются вниз до ближайшего целого (отбрасывается дробная часть).
Например, если x содержит {5, 7.2, 9, 0.5, 13}, то x[2] равно 7.2. Предположим, что мы присвоили какое-то другое значение x[2]:
x[2] = {11,22,33}
Тогда x становится равным: {5, {11,22,33}, 9, 0.5, 13}. Теперь, если мы повторим индексирование x[2], то получим {11,22,33}, а если сделаем запрос x[2][3], то результатом будет атом 33. Если вы попытаетесь индексировать ряд числом, которое выходит за пределы диапазона от 1 до числа элементов ряда, вы получите сообщение об ошибке индексирования. Например, x[0], x[-99] или x[6] все вызовут ошибку. То же самое произойдет и для x[1][3], так как x[1] не является рядом в нашем примере. Как такового, предела на число индексов (размерность ряда) не существует, но тогда ряд должен быть достаточно глубоко вложенным. Двумерный массив, так широко распространённый в других языках, может быть легко представлен рядом рядов:
x = {
{5, 6, 7, 8, 9}, -- x[1]
{1, 2, 3, 4, 5}, -- x[2]
{0, 1, 0, 1, 0} -- x[3]
}
где мы записали числа таким образом, чтобы структура ряда проявилась более отчётливо. Выражение в форме x[i][j] даёт доступ к любому элементу.
Но измерения в этом ряде рядов, тем не менее, не вполне симметричны, так как любая "строка" целиком может быть отобрана как x[i], а столь же простого выражения для отбора целой "колонки" не существует. Другие логические структуры, такие как n-мерные массивы, массивы строк, структуры, массивы структур и т.д., могут быть обработаны легко и гибко:
3-D массив:
y = {
{{1,1}, {3,3}, {5,5}},
{{0,0}, {0,1}, {9,1}},
{{-1,9},{1,1}, {2,2}}
}
y[2][3][1] равно 9
Массив строк:
s = {"Hello", "World", "Euphoria", "", "Last One"}
s[3] равно "Euphoria"
s[3][1] равно 'E'
Структура:
employee = {
{"Джон","Смит"},
45000,
27,
185.5
}
Чтобы обращаться к "полям" или элементам внутри структуры в хорошем стиле программирования, целесообразно создать набор констант для имён различных полей структуры. Тогда вашу программу будет легко читать. Для примера выше можно было бы иметь:
constant NAME = 1
constant FIRST_NAME = 1, LAST_NAME = 2
constant SALARY = 2
constant AGE = 3
constant WEIGHT = 4
Тогда имя служащего можно получить как employee[NAME], а фамилию - как employee[NAME][LAST_NAME].
Массив структур:
employees = {
Читать дальше