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. Покажите состояние стека после каждого из нижеприведенных операторов (в применении к исходному стеку):