在字典上的PostScript forall

时间:2015-04-02 12:36:51

标签: dictionary postscript forall

根据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-
  1. 处理dict的键值对的顺序真的无关紧要吗?
  2. 在堆栈上
  3. ,您首先需要按下值然后按键,还是需要先按键? (因为PLRM只讨论“关键和价值”,但并没有告诉你关于订单的任何信息)。
  4. 提前致谢

1 个答案:

答案 0 :(得分:4)

如果你引用页码,你可能会有所帮助,你引用了PLRM中的部分,很难看出你从哪里得到这个。

执行forall时,forall枚举字典的顺序是任意的,你对它没有任何影响。然而,forall总是按下键然后按下值。即使你在文本中暗示了这一点(并不完全引用),你可以从forall运算符中的例子中看出这是一个例子。

当你说'我的输出'你的意思是说你正在编写自己的PostScript解释器吗?如果是这样,那么你的输出是不正确的,当按下一个键/值对时,首先按下键。