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".
Пример 1:
pretty_print(1, "ABC", {})
{65'A',66'B',67'C'}
Пример 2:
pretty_print(1, {{1,2,3}, {4,5,6}}, {})
{
{1,2,3},
{4,5,6}
}
Пример 3:
pretty_print(1, {"Euphoria", "Programming", "Language"}, {2})
{
"Euphoria",
"Programming",
"Language"
}
Пример 4:
puts(1, "word_list = ") -- курсор остановится в колонке 13
pretty_print(1,
{{"Euphoria", 8, 5.3},
{"Programming", 11, -2.9},
{"Language", 8, 9.8}},
{2, 4, 13, 78, "%03d", "%.3f"}) -- первые 6 из 8 подрежимов
word_list = {
{
"Euphoria",
008,
5.300
},
{
"Programming",
011,
-2.900
},
{
"Language",
008,
9.800
}
}
См. также:
?, print, puts, printf
print
Синтаксис:
print(fn, x)
Описание:
Выводит в файл или на устройство fn объект x со скобками { , , , }, чтобы показать (сохранить) его структуру.
Пример 1:
print(1, "ABC") -- выводится: {65, 66, 67}
puts(1, "ABC") -- выводится: ABC
Пример 2:
print(1, repeat({10,20}, 3))
-- выводится: {{10,20},{10,20},{10,20}}
См. также:
?, pretty_print, puts, printf, get
printf
Синтаксис:
printf(fn, st, x)
Описание:
Выводит x в файл или на устройство fn, используя строку формата st. Если x является рядом, то очередные элементы формата из st применяются к соответствующим элементам ряда x. Если x является атомом, тогда обычно st будет содержать единственный элемент формата, который будет применён к x, однако, если элементов формата несколько, каждый элемент формата будет применён к единственной величине x. Таким образом, printf() всегда ожидает точно 3 аргумента. Только длина последнего аргумента, содержащего выводимые величины, будет изменяться. Изменения могут происходить и в строке формата. Основные форматы:
%d - печатать атом как десятичное целое
%x - печатать атом как шестнадцатеричное целое. Отрицательные числа печатаются как двоичное дополнение, т.е. -1 будет выведено как FFFFFFFF
%o - печатать атом как восьмеричное целое
%s - печатать ряд как строку символов, или печатать атом как отдельный символ
%e - печатать атом как число с плавающей точкой в экспоненциальной форме
%f - печатать атом как число с плавающей точкой в форме с десятичной точкой, а не в экспоненциальной
%g - печатать атом как число с плавающей точкой в наиболее подходящем формате, исходя из величины числа
%% - печатать собственно символ '%'
К основным форматам может быть добавлена ширина полей, т.е. %5d, %8.2f, %10.4s. Число перед десятичной точкой даёт минимальную ширину поля. Число после десятичной точки даёт число точных знаков.
Если ширина поля отрицательная, т.е. %-5d, тогда величина будет выравниваться по левой границе поля внутри поля. Обычно выравнивание производится по правой границе поля. Если ширина поля начинается с нуля, т.е. %08d, поле будет спереди заполняться до заданной ширины нулями. Если ширина поля предваряется знаком '+', т.е. %+7d, тогда положительные величины будут начинаться со знака '+'.
Комментарии:
Обратите внимание на следующую общую ошибку:
name="John Smith"
printf(1, "%s", name) -- ошибка!
В этом случае будет напечатан только первый символ имени, J, так как каждый из символов имени форматируется как отдельная величина. Чтобы вывести всё имя, вы должны вместо предыдущей дать команду:
name="John Smith"
printf(1, "%s", {name}) -- правильно
Теперь третий аргумент, поданный в printf(), является одноэлементным рядом, содержащим всё то, что должно быть отформатировано.