Семь уроков по PostScript


Определение переменных и процедур


Переменные. Чтобы определить переменную в PostScript, ее имя и значение нужно занести в текущий словарь. Это делается с помощью оператора def, как в следующем примере:

/ed 47 def

Косая черта перед именем переменной показывает, что интерпретатору  следует поместить это имя в стек как литерал и не пытаться сразу же искать его в словаре. Вслед за именем в стек заносится число 47. И наконец def берет оба эти объекта из стека и помещает их в текущий словарь. Второй элемент стека (ed) становится ключом, с которым ассоциировано значение первого элемента (47). На первый взгляд это больше похоже на определение константы, чем переменной. Однако определенное с помощью def значение переменной может быть изменено либо новым оператором def, либо другими операторами, например:

/ed 52 def

Посмотрим на примере, как PostScript работает с новой переменной. Если дальше в программе появится строка:

13 ed add

то интерпретатор сделает следующее:

1) поместит число 13 в стек;

2) найдет в стеке словарей значение для ключа ed и поместит его в стек;

3) сложит два числа из вершины стека, заменив их полученной суммой.

Следующий оператор умножает значение переменной ed на 5:

/ed ed 5 mul def

Задание. Используя приведенные выше правила, определите содержимое стека в каждый момент выполнения этой строки.

 

Процедуры. Процедура в PostScript - это набор операторов сгруппированных под общим именем. Имя процедуры является ключом в словаре, а набор операторов ассоциируется как его значение. Когда имя процедуры появляется в программе, то выполняется связанный с ним набор операторов. Процедуры в PostScript определяются точно так же,  как и переменные, с тем только отличием, что набор операторов процедуры должен быть заключен в фигурные скобки. Следующая строка, например, описывает процедуру inch (дюйм), полезную для перевода дюймов в систему единиц, используемую в PostScript по умолчанию.

/inch {72 mul} def

Любое появление слова inch после этой строки заставит интерпретатор поместить в стек число 72, умножить его на число лежащее в стеке ниже его и поместить в стек вместо двух этих чисел результат их произведения, таким образом следующие две строки эквивалентны:




- Начало -  - Назад -  - Вперед -