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-
- dict のキーと値のペアをどの順序で処理するかは問題ではありませんか?
- スタック上で、最初に値をプッシュしてからキーをプッシュする必要がありますか、それとも最初にキーをプッシュする必要がありますか? (PLRM は「キーと値」についてのみ説明しますが、順序については何も説明しません)。
前もって感謝します