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

Пример:

a = allocate(100) -- выделяется 100 байтов в памяти

-- заносится в память один байт за один вызов poke():

poke(a, 97)

poke(a+1, 98)

poke(a+2, 99)

-- заносится 3 байта сразу:

poke(a, {97, 98, 99})

Пример программы:

demo\callmach.ex

См. также:

peek, poke4, allocate, free, allocate_low, free_low, call, safe.e

poke4

Синтаксис:

poke4(a, x)

Описание:

Если x является атомом, в память по адресу a записывается 4 байта (32 бита).

Если x является рядом, в память, начиная с адреса a, записывается последовательность 4-байтовых величин, представленная этим рядом.

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

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

Более быстрой является процедура записи сразу нескольких 4-байтовых величин, чем поочерёдная запись этих величин в цикле.

Записываемые 4-байтовые величины могут быть положительными или отрицательными. Считаны они могут быть затем с помощью или peek4s(), или peek4u().

Пример:

a = allocate(100) -- выделяется 100 байтов в памяти

-- записывается одна 4-байтовая величина за каждый вызов poke4():

poke4(a, 9712345)

poke4(a+4, #FF00FF00)

poke4(a+8, -12345)

-- записывается три 4-байтовых величины сразу:

poke4(a, {9712345, #FF00FF00, -12345})

См. также:

peek4u, peek4s, poke, allocate, allocate_low, call

polygon

Платформа:

DOS32

Синтаксис:

include graphics.e

polygon(i1, i2, s)

Описание:

Вычерчивается многоугольник с 3-мя или более вершинами, заданными в s, на пиксельно-графическом экране с использованием цвета i1. Внутренняя область закрашивается, если i2 равно 1. Не закрашивается, если i2 равно 0.

Пример:

polygon(GREEN, 1, {{100, 100}, {200, 200}, {900, 700}})

-- вычерчивается сплошной зелёный треугольник.

См. также:

draw_line, ellipse

position

Синтаксис:

position(i1, i2)

Описание:

Перемещает курсор на строку i1, в колонку i2, верхний левый угол экрана соответствует строке 1, колонке 1. Символ, выводимый на экран после этой команды, появится именно в назначенном месте. position() сообщит об ошибке, если предпринимается попытка задания знакоместа за пределами экрана.

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

position() работает и в текстовом, и в пиксельно-графическом режимах.

Система координат при отображении текста отличается от системы координат при отображении пикселов. Пикселы отображаются так, что верхний левый угол экрана соответствует координатам (x=0,y=0), а первая координата задает положение по горизонтали, слева направо. В пиксельно-графических режимах вы можете отображать и текст, и пикселы. Процедура position() устанавливает только строку и колонку для текста, положением пикселов она не управляет. Аналогичной процедуры для назначения следующей пиксельной позиции не существует.

Пример:

position(2,1)

-- курсор устанавливается в начало второй строки сверху

См. также:

get_position, puts, print, printf

power

Синтаксис:

x3 = power(x1, x2)

Описание:

Возводит x1 в степень x2, выдаёт результат.

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

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

Степени 2 вычисляются очень быстро.

Пример 1:

? power(5, 2)

-- печатается 25

Пример 2:

? power({5, 4, 3.5}, {2, 1, -0.5})

-- печатается {25, 4, 0.534522}

Пример 3:

? power(2, {1, 2, 3, 4})

-- {2, 4, 8, 16}

Пример 4:

? power({1, 2, 3, 4}, 2)

-- {1, 4, 9, 16}

См. также:

log, sqrt

prepend

Синтаксис:

s2 = prepend(s1, x)

Описание:

Присоединяет x к началу ряда s1. Длина s2 будет равна length(s1) + 1.

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

Если x атом, эта операция дает то же, что и s2 = x & s1. Если же x ряд, то результат будет иным.

Случай, когда s1 и s2 являются одной и той же переменной, обрабатывается очень эффективно.

Пример 1:

prepend({1,2,3}, {0,0}) -- {{0,0}, 1, 2, 3}

-- Сравните со сцеплением (конкатенацией):

{0,0} & {1,2,3} -- {0, 0, 1, 2, 3}

Пример 2:

s = {}

for i = 1 to 10 do

s = prepend(s, i)

end for

-- s будет равно {10,9,8,7,6,5,4,3,2,1}

См. также:

append, concatenation operator &, sequence-formation operator

pretty_print

Синтаксис:

include misc.e

pretty_print(fn, x, s)

Описание:

Печатает в файле или на устройстве fn объект x, используя скобки { , , , }, отступы и последовательные строки, чтобы показать структуру объекта x в удобном для вас представлении s.

Доступен ряд режимов печати, отличающихся представлением s. Подавайте вместо s {}, если хотите воспользоваться режимом по умолчанию (исходным), или задавайте свой любимый режим в элементах ряда s как указано ниже (в квадратных скобках номер элемента ряда s):

[1] показывать символы ASCII:

* 0: никогда

* 1: вместе с любыми целыми в диапазоне ASCII 32..127 (исходный)

* 2: подобно 1, плюс показывать как "строку", когда все целые ряда находятся в диапазоне ASCII

* 3: подобно 2, но показывать *только* буквы в кавычках, а не числа, для любых целых в диапазоне ASCII, а также символы пробела: \t \r \n

[2] число отступов для каждого уровня вложения ряда - исходный: 2

[3] колонка, в которой начинается печать - исходный: 1

[4] область колонки, где начинается перенос строки - исходный: 78

[5] формат для вывода целых - исходный: "%d"

[6] формат для вывода чисел с плавающей точкой - исходный: "%.10g"

[7] минимальная величина кода для символов ASCII - исходный: 32

[8] максимальная величина кода для символов ASCII - исходный: 127

[9] максимальное число выводимых строк.

Если длина s меньше 8, все незаданные опции до конца ряда будут иметь величины по умолчанию, исходные, т.е. {0, 5} даст "никогда не показывать ASCII", плюс 5-символьный отступ, а все остальные величины будут исходными.

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

Отображение начнётся из текущей позиции курсора. Обычно вы ожидаете, что печать начинается в колонке 1, но чтобы так было при вызове pretty_print(), необходимо иметь курсор уже именно в первой колонке. Этого можно добиться, просто выведя символ '\n' перед вызовом pretty_print(). Если вы хотите, чтобы печать началась в другой колонке, вам нужно вызвать position() и задать необходимую величину для режима [3]. Тем самым будет обеспечено вертикальное выравнивание скобок в заданном столбце.

Задавая формат для вывода чисел, целых и с плавающей точкой, можно добавить некоторые украшения, т.е. "(%d)" или "$ %.2f".