Комментарии:
Для освобождения пространства, отведённого под строку, используйте 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.
Комментарии:
При нажатии клавиш 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, добавленным в конец ряда s1 в качестве последнего элемента ряда s2. Длина ряда s2 будет равна length(s1) + 1, то есть, на один элемент больше длины исходного ряда s1.
Комментарии:
Если 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, "конец файла\n")
end if
См. также:
sequence, object, integer, атомы и ряды
atom_to_float32
Синтаксис:
include machine.e
s = atom_to_float32(a1)
Описание:
Преобразует атом Euphoria в ряд из 4-х однобайтовых величин. Эти 4 байта содержат представление числа с плавающей точкой в 32-х битном формате по стандарту IEEE.