Выбрать главу

-- примеры атомов:

0

1000

98.6

-1e6

-- примеры рядов:

{2, 3, 5, 7, 11, 13, 17, 19}

{1, 2, {3, 3, 3}, 4, {5, {6}}}

{{"jon", "smith"}, 52389, 97.25}

{} -- пустой ряд

Числа могут быть шестнадцатеричными. Например:

#FE -- 254

#A000 -- 40960

#FFFF00008 -- 68718428168

-#10 -- -16

В шестнадцатеричных числах разрешены только заглавные буквы A, B, C, D, E, F. Шестнадцатеричные числа всегда положительные, если только перед символом # не стоит знак минус. То есть, например, #FFFFFFFF - это громадное положительное число (4294967295), а *не* -1, как могут ожидать некоторые программисты, практикующие программирование на машинном языке.

Ряды могут быть вложенными на любую глубину, т.е. вы можете иметь ряды внутри рядов внутри рядов и так далее до любого уровня (пока будет хватать памяти на вашей машине). Фигурные скобки можно использовать, чтобы конструировать ряды из списка выражений. Эти выражения могут быть постоянными или вычисляться во время исполнения программы, например:

{x+6, 9, y*w+2, sin(0.5)}

Слова "Hierarchical Objects" - "Иерархические Объекты" в акрониме Euphoria отражают именно иерархическую многоуровневую структуру вложенных рядов. Не следует путать это с иерархией классов в некоторых объектно-ориентированных языках.

Почему же мы назвали их атомами? Почему не просто "числами"? Хорошо, нет проблемы, атом является просто числом, но мы хотели иметь отдельный термин, подчёркивающий тот факт, что атом принципиально отличается от ряда и не имеет неких более элементарных составляющих частей среди объектов Euphoria. Конечно, в мире физики "неделимые" атомы были расщеплены на элементарные частицы много лет назад, но в Euphoria они остаются основными строительными блоками для всех данных, которыми Euphoria манипулирует. Согласно же нашей "химической" аналогии, ряды можно представить себе как некие "молекулы", собранные из атомов и других молекул. Но лучшей аналогией являются каталоги и файлы на диске компьютера. Точно так же как каталог на диске может содержать и файлы, и другие каталоги, ряд может содержать и атомы, и другие ряды (а те ряды могут содержать атомы и другие ряды, и так далее).

Как вы скоро сами убедитесь, ряды делают Euphoria очень простой и очень мощной. Понимание атомов и рядов является ключом к пониманию Euphoria.

Примечание о производительности: Не означает ли это, что все атомы размещены в памяти как 8-байтовые числа с плавающей точкой? Нет. Интерпретатор Euphoria обычно размещает целочисленные атомы как машинные целые (4 байта), чтобы сэкономить память и увеличить скорость вычислений. Но когда результат становится дробным или число слишком увеличивается, автоматически производится преобразование к формату с плавающей точкой.

2.1.2 Строки символов и отдельные символы

Каждая строка символов -- это просто ряд символов. Строка может быть введена с использованием кавычек, например:

"ABCDEFG"

Со строками символов можно делать всё то же самое, что и с любыми другими рядами. Например, та строка, что вы видите выше, полностью эквивалентна ряду:

{65, 66, 67, 68, 69, 70, 71}

который содержит численные коды ASCII, соответствующие символам. Компилятор Euphoria немедленно преобразует "ABCDEFG" в показанный выше ряд чисел. В этом смысле в Euphoria нет "строк", а есть только ряды чисел. Строка в кавычках на самом деле является просто удобной формой записи, чтобы избавить вас от необходимости иметь под рукой таблицу со всеми кодами ASCII и от ввода текста как ряда чисел, разделённых запятыми.

Это означает, что "" эквивалентно {}. Обе записи представляют ряд длины 0, также известный как пустой ряд. Что касается стиля программирования, то естественно писать "", чтобы показать символьный ряд длины 0, и {}, чтобы показать некоторый другой сорт пустого ряда.

Каждый отдельный символ является атомом. Его следует вводить, используя одинарные кавычки. Имеется отличие отдельного символа (который является атомом) от строки символов, содержащей единственный символ, которая представляет собой ряд с длиной 1. То есть,

'B' -- эквивалентно атому 66 - код ASCII для B

"B" -- эквивалентно ряду {66}

Повторим, 'B' - это просто вариант записи, эквивалентный числу 66. В Euphoria, по сути, нет никаких символов, а есть только числа (атомы).

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

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

\n новая строка - перевод строки, LF

\r возврат каретки, CR

\t табуляция

\\ собственно косая черта (солидус)

\" двойная кавычка

\' одинарная кавычка

Например, "Hello, World!\n", или '\\'. Редактор Euphoria отображает строки символов и отдельные символы в зелёном цвете.

2.1.3 Комментарии

Комментарии начинаются с двух знаков "минус" и продолжаются до конца текущей строки. То есть,

-- это комментарий

Комментарии игнорируются компилятором и никак не влияют на скорость исполнения программы. Редактор отображает комментарии в красном цвете.

В самой первой строке вашей программы (и только в ней) вы можете использовать специальный комментарий, начинающийся с #!, то есть,

#!/home/rob/euphoria/bin/exu

Подобный комментарий информирует командный интерпретатор Linux, что ваш файл следует исполнять под управлением интерпретатора Euphoria, и дает полный путь к интерпретатору Euphoria exu. Если вы измените атрибуты этого вашего файла, обозначив его как исполняемый, вы сможете запускать его, просто введя его имя в командной строке как это делается со стандартными командами Linux, то есть вам уже не нужно будет предварительно вводить "exu". Под DOS и Windows эта первая строка с #! трактуется просто как комментарий (хотя сервер Web Apache под Windows и распознает её). Если вы окутываете свой файл (.il), вместо exu следует указывать backendu.

2.2 Выражения

Подобно другим языкам программирования, Euphoria позволяет вам выполнять вычисления, просто записывая выражения для результатов. Однако в Euphoria вы можете выполнить вычисления на целом ряде данных в одном-единственном выражении, тогда как в большинстве других языков вам пришлось бы конструировать цикл. В Euphoria вы можете обрабатывать сразу весь ряд на манер отдельного числа. Ряд может быть скопирован, подан в подпрограмму и обсчитан как единое целое. Например,

{1,2,3} + 5

является выражением, в котором ряд {1,2,3} и атом 5 складываются и дают результирующий ряд {6,7,8}.

Чуть позже мы приведем множество других примеров.

2.2.1 Операции сравнения

Операции сравнения выполняются в выражениях с помощью операторов <, >, <=, >=, =, !=, результатом работы каждого из которых является 1 (истина, да) или 0 (ложь, нет).