register_block
Синтаксис:
include machine.e (or safe.e)
register_block(a, i)
Описание:
Регистрирует (добавляет) участок памяти в списке безопасных блоков, поддерживаемом библиотекой safe.e(отладочная версия machine.e). Блок начинается с адреса a. Длина блока составляет i байтов.
Комментарии:
Данная процедура предназначена только для отладочных целей. Библиотека safe.eрегистрирует и отслеживает блоки памяти, которые вашей программе разрешено использовать в подпрограммах peek(), poke(), mem_copy() и т.п. Процедура нормально работает только с теми участками памяти, которые выделены вами для своих целей путем выполнения команд Euphoria allocate() или allocate_low() и которые еще не освобождены с помощью команд Euphoria free() или free_low(). В некоторых случаях вы можете затребовать добавочные, внешние, участки памяти, например, в результате вызова функции Си. Если вы отлаживаете вашу программу с использованием safe.e, вы должны также регистрировать эти внешние участки памяти, иначе safe.eбудет препятствовать вашему доступу к ним. Когда вы закончите использование внешнего блока, вы сможете отменить его регистрацию с помощью команды unregister_block().
Когда вы включаете machine.e, у вас вызываются другие версии процедур register_block() и unregister_block(), которые не производят никаких операций. Подобный приём делает простыми и лёгкими переходы между отладочным и штатным режимами исполнения вашей программы.
Пример :
atom addr
addr = c_func(x, {})
register_block(addr, 5)
poke(addr, "ABCDE")
unregister_block(addr)
См. также:
unregister_block, safe.e
remainder
Синтаксис:
x3 = remainder(x1, x2)
Описание:
Вычисляет остаток от деления x1 на x2. Результат будет иметь тот же знак, что и x1, а величина результата будет меньше, чем величина x2.
Комментарии:
Аргументы, подаваемые в эту функцию, могут быть атомами или рядами. В случае рядов применяются правила действий с рядами.
Пример 1:
a = remainder(9, 4)
-- a будет равно 1
Пример 2:
s = remainder({81, -3.5, -9, 5.5}, {8, -1.7, 2, -4})
-- s будет равно {1, -0.1, -1, 1.5}
Пример 3:
s = remainder({17, 12, 34}, 16)
-- s будет равно {1, 12, 2}
Пример 4:
s = remainder(16, {2, 3, 5})
-- s будет равно {0, 1, 1}
См. также:
floor
repeat
Синтаксис:
s = repeat(x, a)
Описание:
Создаёт ряд длины a, где каждый элемент является x.
Комментарии:
Когда вы повторяете с помощью данной функции ряд или число с плавающей точкой, интерпретатор фактически не создаёт множественные копии в памяти. Напротив, единственная копия помечается числом экземпляров.
Пример 1:
repeat(0, 10) -- {0,0,0,0,0,0,0,0,0,0}
Пример 2:
repeat("JOHN", 4) -- {"JOHN", "JOHN", "JOHN", "JOHN"}
-- интерпретатор создаст только одну копию "JOHN"
-- в памяти
См. также:
append, prepend, оператор формирования ряда
reverse
Синтаксис:
include misc.e
s2 = reverse(s1)
Описание:
Оборачивает порядок элементов в ряде.
Комментарии:
Создаётся новый ряд, в котором элементы высшего уровня имеют порядок, обратный по отношению к исходному ряду.
Пример 1:
reverse({1,3,5,7}) -- {7,5,3,1}
Пример 2:
reverse({{1,2,3}, {4,5,6}}) -- {{4,5,6}, {1,2,3}}
Пример 3:
reverse({99}) -- {99}
Пример 4:
reverse({}) -- {}
См. также:
append, prepend, repeat
routine_id
Синтаксис:
i = routine_id(st)
Описание:
Функция выдаёт целое число i, известное как номер(идентификатор) подпрограммы, который присваивается процедуре или функции Euphoria, уже определённой программистом. Имя подпрограммы задаётся символьным рядом st. Если подпрограмма с таким именем ещё не определена, выдаётся -1.
Комментарии:
Полученный с помощью данной функции номер подпрограммы может подаваться в call_proc() или call_func() для непрямого (косвенного) вызова подпрограммы с именем st.
Подпрограмма с именем st должна быть видимой, т.е. доступной для вызова в той точке вашей программы, где вызвана функция routine_id() для получения номера подпрограммы. Непрямые вызовы подпрограмм по неким неизвестным пока их номерам могут появляться в программе ранее собственно определения подпрограмм, но конкретное численное значение каждого номера может быть выработано только после определения конкретной подпрограммы - внимательно просмотрите пример 2 ниже.
Правильный номер подпрограммы, как только ему присвоено конкретное значение, будет работать в любом месте вашей программы при косвенных вызовах подпрограммы по этому её номеру через call_proc() / call_func().
Некоторые типовые применения номеров, вырабатываемых routine_id():
Читать дальше