根据PLRM,你在dict上执行forall的顺序无关紧要:
(p.597)forall在操作数堆栈上按下一个键和一个值,并为字典中的每个键值对执行proc
...
(p.597)forall枚举字典中条目的顺序是任意的。在执行proc期间放入字典中的新条目可能包含也可能不包含在枚举中。稍后将在枚举中遇到通过proc从字典中删除的现有条目。
现在我正在执行一些代码:
/d 5 dict def
d /abc 123 put
d { } forall
我的输出(操作数堆栈)是:
--------top-
/abc
123
-----bottom-
ghostscript和PLRM(操作数堆栈)的输出是:
--------top-
123
/abc
-----bottom-
提前致谢
答案 0 :(得分:4)
如果你引用页码,你可能会有所帮助,你引用了PLRM中的部分,很难看出你从哪里得到这个。
执行forall时,forall枚举字典对的顺序是任意的,你对它没有任何影响。然而,forall总是按下键然后按下值。即使你在文本中暗示了这一点(并不完全引用),你可以从forall运算符中的例子中看出这是一个例子。
当你说'我的输出'你的意思是说你正在编写自己的PostScript解释器吗?如果是这样,那么你的输出是不正确的,当按下一个键/值对时,首先按下键。