12 pop -> -

где символ «-» означает не то, что в данный момент стек обязательно пуст, а что просто убран тот элемент, который был в его вершине.

Оператор dup копирует верхний элемент:

12 dup -* 12 12

оператор exch меняет местами два верхних элемента:

-5.2 12 exch -* 12 -5.2

Оператор clear очищает весь стек:

34 -5.2 12 clear -» <empty>

Можно с полным основанием утверждать, что операторы dup, exch и cl ear нарушают смысл истинного стека, поскольку в них делается больше, чем просто проталкивание или выталкивание. (Например, dup должен «посмотреть» на элемент в вершине стека, чтобы скопировать его.) Это действительно так, однако эти операторы настольно удобны, что PostScript позволяет себе некоторую поэтическую вольность и поддерживает их.

П. О языке PostScript

1005

Г1.4. Более сложные операторы работы со стеком Кроме простейших операторов push или pop, часто используется целый ряд дополнительных операторов. При первом прочтении их можно пропустить.

Оператор n index выталкивает число п, отсчитывает сверху вниз п элементов в стеке (при этом верхний элемент считается нулевым) и проталкивает в стек копию я-ro элемента:

34 12 94 2 index -» 34 12 94 34

б 0 index -> б б X same as dup

* то же самое, что dup

Оператор п сору выталкивает п элементов и затем проталкивает в стек копию верхних п элементов:

12 б 2 сору -* 12 б 12 б

12 95 23 3 сору -* 12 95 23 12 95 23

Оператор num shifts roll проталкивает shifts и num, а затем производит циклический сдвиг верхних num элементов shift раз (положительные значения shift означают движение вверх по стеку, а отрицательные значения shift означают движение вниз):

-3 144 78 3 1 roll -» 78 -3 144
-3 144 78 3 -1 roll -» 144 78 -3
23 12 -3 144 78 4 -2 roll -> 23 144 78 12 -3

Оператор count подсчитывает количество элементов в стеке и проталкивает это значение в стек: 12 35 121 count -» 12 35 121 3

Практические упражнения П. Развлечения со стеком Исходное состояние стека операнда: 345 129 -24 366 89. Покажите состояние стека после каждого из нижеприведенных операторов (в применении к исходному стеку):


⇐ Предыдущая| |Следующая ⇒