Язык программирования Euphoria | страница 18




>length({5,6,7}) -- 3

>length({1, {5,5,5}, 2, 3}) -- 4 (не 6!)

>length({}) -- 0

>length(5) -- ОШИБКА!


Функция repeat(item, count) выдает ряд, который состоит из элементов 'item', повторенных 'count' раз, то есть,


>repeat(0, 100) -- {0,0,0,...,0} т.е. 100 нулей

>repeat("Hello", 3) -- {"Hello", "Hello", "Hello"}

>repeat(99,0) -- {}


Элемент, подлежащий повторению, может быть любым атомом или рядом.


Функция append(s, item) выдаёт новый ряд, добавляя элемент 'item' после конца ряда 's'. Функция prepend(s, item) выдаёт новый ряд, прибавляя элемент 'item' перед началом ряда 's', то есть,


>append({1,2,3}, 4) -- {1,2,3,4}

>prepend({1,2,3}, 4) -- {4,1,2,3}


>append({1,2,3}, {5,5,5}) -- {1,2,3,{5,5,5}}

>prepend({}, 9) -- {9}

>append({}, 9) -- {9}


Длина нового ряда всегда на 1 больше, чем длина исходного ряда. Присоединяемый элемент может быть любым атомом или рядом.

Эти две встроенные функции, append() и prepend(), в чём-то похожи на оператор сцепления, &, но имеется и вполне ясное отличие, то есть,


>-- присоединение ряда отличается

>append({1,2,3}, {5,5,5}) -- {1,2,3,{5,5,5}}

>{1,2,3} & {5,5,5} -- {1,2,3,5,5,5}


>-- присоединение атома идентично

>append({1,2,3}, 5) -- {1,2,3,5}

>{1,2,3} & 5 -- {1,2,3,5}


2.2.10 Порядок операций

Порядок выполнения операций интерпретатором показан в таблице:


>unary- unary+ not


>* /


>+ -


>&


><= = = !=


>and or xor


последняя очередь: { , , , }


Следовательно, 2+6*3 означает 2+(6*3), а не (2+6)*3. Операторы, расположенные в таблице в одной строке, имеют одинаковую очерёдность и поэтому выполняются в том порядке, как записаны в выражении слева направо. Вы можете задать любой другой необходимый вам порядок операций, воспользовавшись в вашем выражении круглыми скобками ( ).

Символ равенства '=', используемый для записи не только операции сравнения, но и команды присваивания, не создаёт двусмысленностей в программе, так как его конкретное назначение вполне ясно из контекста.


2.3 Euphoria против других языков

Положив в основу Euphoria ряды как единственную, простую, общую, рекурсивную структуру данных, удалось избежать громадного объёма сложностей, обычно присутствущих в языках программирования. Массивы, структуры, союзы, массивы записей, многомерные массивы и другие тому подобные объекты других языков все могут быть легко представлены рядами. И структуры высшего уровня, такие как списки, стеки, архивы, очереди, деревья и т.д., тоже не ушли от этой участи.