字典上的 PostScript forall

Posted

技术标签:

【中文标题】字典上的 PostScript forall【英文标题】:PostScript forall on dictionaries 【发布时间】:2015-04-02 12:36:51 【问题描述】:

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

提前致谢

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

我已添加页码。从我看到的文字来看,我并不清楚。 “操作数堆栈上的键和值”。并不是说它永远是第一个关键。该示例可能是 key 为 first 但没有说明 value first 是否也可能的示例。这是“愚蠢”的细节,但我想 100% 确定这一点,因此提出了这个问题。是的,我正在开发自己的口译员 :) 好吧,祝你好运,这是一项艰巨的任务……也许你应该与Luser droog合作。 FWIW 每当字典操作在堆栈上成对出现时,总是首先推送键。 我看到 Luser droog 也忙着写一些后记,基于他在 SO 上的回答 :-) @luserdroog 你可以删除电子邮件:) @juFo 谢谢。还有comp.lang.postscript。

以上是关于字典上的 PostScript forall的主要内容,如果未能解决你的问题,请参考以下文章

PostScript语言教程(介绍)

将 EPS 图像插入 PostScript 文档

PostScript

打印 PostScript 文件时出现纹理条纹

手工编写基本的 PostScript 脚本

在不尝试打印的情况下验证 Postscript?