651
Строка 9. В результате выполнения функции dosum с параметрами 3 и 6 по
лучается 4 и 22. Создаются копии целых чисел 4 и 22, и число 22 печатается.
Затем печатается строка из трех пробелов, и в текущей позиции курсора печа
тается 4.
Строка 10. Стек очищается от оставшихся в нем значений 4 и 22.
Строка 11. Курсор перемещается примерно на треть дюйма (25 точек).
Строка 12. В результате выполнения операций 0 1 9 {pop dosum} for числа
0, 1, …, 9 будут последовательно размещаться в вершине стека с последующим
выполнением процедуры {pop dosum}. На каждой итерации цикла вызываются
функции pop (чтобы избежать использования индексов) и dosum, при этом стек
операндов последовательно изменяется: (0, 0) ⇒ (1, 1) ⇒ (2, 5) ⇒ (3, 14) ⇒
⇒ (4, 30) ⇒ … (10,385). Затем функция formatit помещает верхний элемент
стека (385) на страницу.
Строка 13. Полученная страница распечатывается.
Примеры операций Postscript. Для каждой операции указывается число не
обходимых для ее выполнения параметров (верхние элементы стека) и число вычисля
емых значений, помещаемых в стек. Для обычной бинарной операции (например,
add), которая получает два параметра из стека и заменяет их одним результирую
щим значением, задание параметров будет выглядеть как (2,1).
add(2,1) Использует два верхних элемента стека в качестве параметров и заменяет
их суммой их значений
aload(1,n+1) Помещает элементы параметрамассива в стек ниже массива
array(1,1) Создает массив длиной, равной значению параметра
astore(n+1,1) Сохраняет n элементов в параметремассиве, который является верхним
элементом стека
Boolean(2,1) Сравнивает два верхних элемента стека и помещает в вершину стека
логическую величину (true или false). Boolean может принимать значения
eq, ne, ge, gt, le или lt. Кроме того, можно использовать операции and, or, not
и xor в их обычном значении
clear(n,0) Извлекает все элементы из стека, очищая его
cleartomark(n,0) Извлекает n элементов стека, начиная с верхнего
copy(n+1,2n) n верхних элементов стека дублируются и располагаются в стеке
counttomark(n,n+1) Пересчитываются элементы стека, начиная с указанного, и полученное
значение помещается в стек
currentfont(0,1) Текущий шрифт помещается в стек. (Эту операцию можно использовать
для изменения размера текущего шрифта, даже не зная, какой он.
Например, currentfont 2 scalefont setfont в 2 раза увеличивает
размер текущего шрифта и устанавливает полученный шрифт в качестве
текущего)
cvrs(3,1) a b c cvrs преобразует число a в систему счисления по основанию b,
сохраняет полученное значение в строке c и возвращает подстроку,
содержащую a. Так, 123 10 10 string cvrs возвратит строку (123). 123 2 10
string cvrs
преобразует число 123 в двоичную систему и возвратит это число
как последовательность двоичных цифр
def(2,0) /a b def создаст в пользовательском словаре userdict элемент с именем a,
определяющий функцию по ее описанию b. Обычно b задается как список
операций {x y z}
div(2,1) div
заменяет два верхних элемента стека на их частное
П.10. Postscript