问题描述
我真的在为 postscript 中的语法苦苦挣扎。该程序在堆栈中给出了 6 个值,并且需要以相同的顺序返回堆栈,每个项目都添加 1。我在这一点上迷路了,下面的程序是我能得到的最接近的程序。这当前需要一个堆栈并将 2 添加到其中的最后一个值。
/map {
1 dict begin
count 0 gt %if more than 0 on stack
{
/x exch def %get first value
x 1 add
/x
}if
end
} def
解决方法
可能最简单的方法是将值包装在一个数组中。然后您可以使用 forall
循环对每个项目进行操作。
/map {
6 array astore
{
1 add
} forall
} def
如果您想避免创建数组,可以使用 roll
重新排列堆栈中的项目。
/map {
6 {
1 add
6 1 roll
} repeat
} def
另请注意,在您的代码中,您可能不想要最后一个 /x
(它会将名称留在堆栈中,以后可能会妨碍到它)。由于堆栈中的顶部项目已经是堆栈顶部的项目,因此您不需要 /x exch def x
。但是,您可以继续这种风格,只需对所有 6 个值进行定义。
/map {
/z exch def
/y exch def
/x exch def
/w exch def
/v exch def
/u exch def
u 1 add
v 1 add
w 1 add
x 1 add
y 1 add
z 1 add
} def