如何在 postscript 中创建以斜杠为键的字典

问题描述

所以我在 Postscript 中知道这些基本的 dict 命令:

i dict 创建一个包含 i 个条目的字典

d begin 将字典 d 移动到字典堆栈

end 从字典栈中移除最顶层的字典

d n w put 在字典 w

中以名称 n 存储值 d

d n get 获取字典n名称d的值,并入栈

我想做的是创建一个表示不同操作数关联性的字典。 + 操作数和 - 操作数共享相同的优先级,因此它们都设置为 0,*/ 操作数也共享相同的优先级,但具有更高的优先级优先级高于 +-,因此设置为 1 等等...

问题是,我无法将字典键设置为 /,因为它被视为某种“分隔符”。有什么办法可以解决这个问题,因为我无法更改密钥,也无法创建这样的字典:

/prioritydict 5 dict def
prioritydict /(-) 0 put
prioritydict /(+) 0 put
prioritydict /(*) 1 put
prioritydict /(/) 1 put
prioritydict /(^) 2 put

也不喜欢这样:

/prioritydict 5 dict def
prioritydict /- 0 put
prioritydict /+ 0 put
prioritydict /* 1 put
prioritydict // 1 put
prioritydict /^ 2 put

非常感谢任何帮助

解决方法

您可以使用 cvn(转换为名称)运算符将您想要的任何形式的字符串转换为文字名称。这些都应该是等价的:

prioritydict <2f> cvn 1 put

prioritydict (\/) cvn 1 put

prioritydict (\057) cvn 1 put
,
%!

/prioritydict 5 dict def

prioritydict begin

/+ 0 def
/- 0 def
/* 1 def
%// 1 def    conflicts with immediately evaluated name
/^ 2 def

* ^ add =
,

如果您只想使用字面名称提及它,那么您可以只使用一个斜线。

/ 

也就是说,一个空名称,仅由装饰器和下一个分隔符(空格或换行符或括号或大括号)前的零个字符表示。

您应该能够定义并加载它,但是您不能直接为其创建可执行文件名称,因此您不能像其他定义一样使用自动加载。

/ 1 def
/ load =
/ cvx exec =

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...