2

根据 PLRM,在 dict 上执行 forall 的顺序无关紧要:

(第 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. 处理字典的键值对的顺序真的不重要吗?
  2. 在栈上,是先压入值再压入键,还是先压入键?(因为 PLRM 只谈论“一个键和一个值”,但没有告诉你任何关于订单的信息)。

提前致谢

4

1 回答 1

4

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

当执行 forall 时,forall 枚举字典的顺序是任意的,您对其没有任何影响。然而,forall 总是先按下键,然后按下值。即使您(不完全)引用的文本中暗示了这一点,您也可以从 forall 运算符中的示例中看到这是典型的情况。

当您说“我的输出”时,您的意思是您正在编写自己的 PostScript 解释器吗?如果是这样,那么您的输出不正确,在推送键/值对时,首先推送键。

于 2015-04-02T15:33:26.780 回答