3. Алфавитный перечень подпрограмм

 

?

Синтаксис: ? x
Описание: Это краткий вариант, почти соответствующий: print(1, x) - т.е. печать величины выражения на стандартном выходе.
Пример:
? {1, 2} + {3, 4}  -- будет отображено {4, 6}

Комментарии: Оператор ? немного отличается от print() тем, что переводит строку, чтобы сделать вывод более легким для чтения на экране.
См. также: print

abort

Синтаксис: abort(i)
Описание: Прерывает исполнение программы. Аргумент i представляет собой целочисленный код завершения, выдаваемый в операционную систему. Величина 0 обычно указывает на успешное завершение программы. Другими величинами могут быть помечены различные по характеру ошибки. Пакетные программы DOS (.bat) могут читать эту величину, используя оператор errorlevel. Программы Euphoria могут читать эту величину, используя функцию system_exec().
Комментарии: abort() полезна, когда в программе имеются многоуровневые вызовы процедур, а исполнение должно закончиться немедленно, например, из-за обнаруженной неисправимой ошибки.

Если вы не используете abort(), ex.exe/exw.exe/exu будут при нормальном завершении выдавать код 0. Если ваша программа остановлена из-за ошибки, обнаруженной Euphoria во время компиляции или прогона, тогда выдается код 1.

Пример:
if x = 0 then
    puts(ERR, "не могу делить на 0 !!!\n")
    abort(1)
else
    z = y / x
end if

См. также: crash_message, system_exec

all_palette

Платформа: DOS32
Синтаксис: include graphics.e
all_palette(s)
Описание: Задает новые интенсивности цветов для всего набора цветов текущего графического режима. s является рядом формы:

{{r,g,b}, {r,g,b}, ..., {r,g,b}}

Каждый элемент задает новую интенсивность цвета {красный, зеленый, синий} для соответствующего номера цвета, начиная с номера 0. Величины для красного, зеленого и синего должны быть в пределах от 0 до 63.

Комментарии: Данная процедура исполняется значительно быстрее, чем если бы вы использовали palette() для задания новых интенсивностей цвета поочередно. Эта процедура может быть использована с read_bitmap() для быстрого вывода изображения на экран.
Пример программы: demo\dos32\bitmap.ex
См. также: get_all_palette, palette, read_bitmap, video_config, graphics_mode

allocate

Синтаксис: include machine.e
a = allocate(i)
Описание: Подготавливает i последовательных байтов памяти. Выдает начальный адрес блока памяти, или 0, если память не может быть выделена. Выданный адрес позволит, как минимум, разместить очередные 4 байта.
Пример:
buffer = allocate(100)
for i = 0 to 99 do
    poke(buffer+i, 0)
end for

См. также: free, allocate_low, peek, poke, call

allocate_low

Платформа: DOS32
Синтаксис: include machine.e
i2 = allocate_low(i1)
Описание: Подготавливает i1 последовательных байтов в нижней памяти, т.е. в стандартной памяти (адрес ниже 1 мегабайта). Выдает начальный адрес блока памяти или 0, если память не может быть выделена.
Комментарии: Некоторые обработчики прерываний DOS требуют, чтобы вы заносили один или более адресов в регистры. Эти адреса должны принадлежать к стандартной памяти, чтобы DOS была способна читать и записывать по этим адресам.
Пример программы: demo\dos32\dosint.ex
См. также: dos_interrupt, free_low, allocate, peek, poke

allocate_string

Синтаксис: include machine.e
a = allocate_string(s)
Описание: Подготавливает пространство для строкового ряда s. Копирует s в это пространство, заканчивая строку служебным символом 0. Такой формат требуется для C-строк. Выдает адрес строки в памяти. Если блок памяти достаточного размера недоступен, выдает 0.
Комментарии: Для освобождения пространства, отведенного под строку, используйте free().
Пример:
atom title

title = allocate_string("The Wizard of Oz")

Пример программы: demo\win32\window.exw
См. также: allocate, free

allow_break

Синтаксис: include file.e
allow_break(i)
Описание: Когда i = 1 (истина), команды control-c и control-Break получают возможность прерывать вашу программу, если она пытается обратиться к клавиатуре. Когда i = 0 (ложь) ваша программа не будет реагировать на команды control-c или control-Break.
Комментарии: DOS будет выводить ^C на экран, даже когда ваша программа не может быть прервана.

Изначально ваша программа может быть прервана в любой точке, где она пытается читать с клавиатуры. Она может быть также прервана другими операциями ввода/вывода в зависимости от режима, установленного пользователем в его файле config.sys. (Уточните по руководству MS-DOS особенности команды BREAK.) Для некоторых типов программ это внезапное прерывание может оставить дела в ошибочном состоянии и привести в результате к потере данных. allow_break(0) позволяет вам избежать этой ситуации.

Вы можете проверить, не нажимал ли пользователь control-c или control-Break, для этого служит функция check_break().

Пример:
allow_break(0)  -- не дайте пользователю убить меня!

См. также: check_break

and_bits

Синтаксис: x3 = and_bits(x1, x2)
Описание: Выполняет логическую операцию AND над соответствующими битами в x1 и x2. Бит в x3 устанавливается в 1, только если соответствующие биты в x1 и x2 оба равны 1.
Комментарии: Аргументами данной функции могут быть атомы и ряды. Если аргументы являются рядами, применяются правила операций на рядах.

Аргументы должны быть представлены как 32-битные числа, со знаком или без знака.

Если вы намерены манипулировать полными 32-битными величинами, вы должны объявить переменные как atom, но не как integer. В Euphoria тип integer ограничен 31-битом.

Результат трактуется как число со знаком. Оно будет отрицательным, когда старший бит является 1.

Для лучшего понимания двоичного представления числа вы можете вызвать его на отображение в шестнадцатиричной записи. Используйте для этого оператор printf() с форматом %x.

Пример 1:
a = and_bits(#0F0F0000, #12345678)
-- a равно #02040000

Пример 2:
a = and_bits(#FF, {#123456, #876543, #2211})
-- a равно {#56, #43, #11}

Пример 3:
a = and_bits(#FFFFFFFF, #FFFFFFFF)
-- a равно -1
-- Заметьте, что #FFFFFFFF есть положительное число,
-- но результат побитовой логической операции является
-- 32-битным числом со знаком, поэтому он отрицателен.

См. также: or_bits, xor_bits, not_bits, int_to_bits

append

Синтаксис: s2 = append(s1, x)
Описание: Создает новый ряд, идентичный s1, но с x, добавленным в конец ряда как последний элемент. Длина s2 будет равна length(s1) + 1.
Комментарии: Если x является атомом, операция эквивалентна s2 = s1 & x. Если x является рядом, - не эквивалентна.

Необходимая дополнительная память выделяется автоматически и очень эффективно, благодаря динамическому распределению памяти, отличающему Euphoria. Случай, когда s1 и s2 в действительности являются одним и тем же рядом, (как в Примере 1 ниже) особенно оптимален.

Пример 1: Вы можете применить append() для динамического удлинения ряда, т.е.
sequence x

x = {}
for i = 1 to 10 do
    x = append(x, i)
end for
-- x теперь равен {1,2,3,4,5,6,7,8,9,10}

Пример 2: Любой объект Euphoria может быть добавлен к ряду, т.е.
sequence x, y, z

x = {"fred", "barney"}
y = append(x, "wilma")
-- y теперь равен {"fred", "barney", "wilma"}

z = append(append(y, "betty"), {"bam", "bam"})
-- z теперь равен {"fred", "barney", "wilma", "betty", {"bam", "bam"}}

См. также: prepend, оператор сцепления &, оператор формирования ряда

arccos

Синтаксис: include misc.e
x2 = arccos(x1)
Описание: Выдает угол, косинус которого равен x1.
Комментарии: Аргумент, x1, должен быть в пределах от -1 до +1 включительно.

Результат в радианах будет находиться между 0 и PI.

Данная функция может быть применена к атому или ко всем элементам ряда.

arccos() вычисляется не так быстро, как arctan().

Пример:
s = arccos({-1,0,1})
-- s равно {3.141592654, 1.570796327, 0}

См. также: cos, arcsin, arctan

arcsin

Синтаксис: include misc.e
x2 = arcsin(x1)
Описание: Выдает угол, синус которого равен x1.
Комментарии: Аргумент, x1, должен быть в пределах от -1 до +1 включительно.

Результат в радианах будет находиться между -PI/2 и +PI/2.

Данная функция может быть применена к атому или ко всем элементам ряда.

arcsin() вычисляется не так быстро, как arctan().

Пример:
s = arcsin({-1,0,1})
-- s равно {-1.570796327, 0, 1.570796327}

См. также: sin, arccos, arctan

arctan

Синтаксис: x2 = arctan(x1)
Описание: Выдает угол, тангенс которого равен x1.
Комментарии: Результат в радианах будет между -PI/2 и PI/2.

Данная функция может быть применена к атому или ко всем элементам ряда.

arctan() вычисляется быстрее, чем arcsin() или arccos().

Пример:
s = arctan({1,2,3})
-- s равно {0.785398, 1.10715, 1.24905}

См. также: tan, arcsin, arccos

atom

Синтаксис: i = atom(x)
Описание: Выдает 1, если x является атомом, иначе выдает 0.
Комментарии: Данный оператор служит для объявления типа atom. Вы можете также вызывать его подобно обычной функции, чтобы определить, является ли объект атомом.
Пример 1:
atom a
a = 5.99

Пример 2:
object line

line = gets(0)
if atom(line) then
    puts(SCREEN, "end of file\n")
end if

См. также: sequence, object, integer, атомы и ряды

atom_to_float32

Синтаксис: include machine.e
s = atom_to_float32(a1)
Описание: Преобразует атом Euphoria в ряд из 4-х однобайтовых величин. Эти 4 байта содержат представление числа с плавающей точкой в 32-х битном формате по стандарту IEEE.
Комментарии: Атомы Euphoria могут иметь величины, соответствующие 64-битным числам с плавающей точкой стандарта IEEE, так что вы можете потерять точность при преобразованиях к 32-битным (16 значащих цифр против 7). Диапазон экспонент намного больше в 64-битном формате (10 ... 308, против 10 ... 38), так что некоторые атомы могут быть слишком большими или слишком маленькими для представления в 32-битном формате. В этом случае вы получите одну из специальных 32-битных величин: inf или -inf (бесконечность или -бесконечность). Чтобы избежать этого, вы можете применить atom_to_float64().

Целочисленные величины также будут преобразованы в 32-битный формат с плавающей точкой.

Пример:
fn = open("numbers.dat", "wb")
puts(fn, atom_to_float32(157.82)) -- выводит 4 байта в файл

См. также: atom_to_float64, float32_to_atom

atom_to_float64

Синтаксис: include machine.e
s = atom_to_float64(a1)
Описание: Преобразует атом Euphoria в ряд из 8 однобайтовых величин. Эти 8 байтов содержат представление числа с плавающей точкой в 64-битном формате по стандарту IEEE.
Комментарии: Все атомы Euphoria имеют величины, которые могут быть представлены как 64-битные числа с плавающей точкой в формате по стандарту IEEE, поэтому вы можете преобразовать любой атом в 64-битный формат без всяких потерь точности.

Целочисленные величины также будут преобразованы в 64-битный формат с плавающей точкой.

Пример:
fn = open("numbers.dat", "wb")
puts(fn, atom_to_float64(157.82)) -- выводит 8 байтов в файл

См. также: atom_to_float32, float64_to_atom

bits_to_int

Синтаксис: include machine.e
a = bits_to_int(s)
Описание: Преобразует ряд, состоящий из двоичных единиц и нулей, в положительное число. Младший значащий бит находится в s[1].
Комментарии: Если вы печатаете s, биты будут появляться в "инверсном" порядке, но это соглашение удобно, чтобы иметь возрастающие индексы для доступа к битам с возрастающим значением.
Пример:
a = bits_to_int({1,1,1,0,1})
-- a равно 23 (двоичное 10111)

См. также: int_to_bits, операции на рядах

bk_color

Синтаксис: include graphics.e
bk_color(i)
Описание: Устанавливает цвет фона в один из 16 стандартных цветов. В графических режимах весь экран перекрашивается немедленно. В текстовых режимах любые новые символы, которые вы печатаете, будут появляться на фоне с новым цветом.
Комментарии: 16 стандартных цветов определены как константы в файле graphics.e

В графических режимах, цвет 0, который обычно ЧЁРНЫЙ, будет установлен в то самое значение палитры {r,g,b}, что и цвет номера i.

В некоторых графических режимах на краю экрана появляется цветной бордюр. В 256-цветных режимах цвет бордюра соответствует 17-ому цвету палитры. Вы можете управлять цветом бордюра подобно всем другим цветам.

В текстовых режимах для того, чтобы восстановить исходный цвет фона, когда ваша программа заканчивается, т.е. 0 - ЧЁРНЫЙ, вы должны вызвать процедуру bk_color(0). Если курсор находится на нижней строке экрана, целесообразно напечатать что-нибудь перед остановкой вашей программы. Напечатайте хотя бы '\n', и этого может быть достаточно.

Пример:
bk_color(BLACK)

См. также: text_color, palette

bytes_to_int

Синтаксис: include machine.e
a = bytes_to_int(s)
Описание: преобразует 4-х элементный ряд, состоящий из байтов, в атом. Элементы s находятся в порядке, предусмотренном для 32-битных целых чисел на машинах 386+, т.е. младший значащий байт первый.
Комментарии: Результат может быть больше, чем допускает тип integer, поэтому вы должны присваивать значение атому.

s будет обычно содержать положительные величины, которые прочитаны оператором peek() из 4-х последовательных ячеек памяти.

Пример:
atom int32

int32 = bytes_to_int({37,1,0,0})
-- int32 равно 37 + 256*1 = 293

См. также: int_to_bytes, bits_to_int, peek, peek4s, peek4u, poke

 

... продолжение от C до D