我想从postscript中获取StandardEncoding向量(PLRM的附录E.6中有一个图形版本,但没有文本)。我正在寻找[/ A / B / C / D]的内容,但实际上我可以将编码向量中的位置与字符命令相关联的任何内容都是好的。
我试过了
(%stdout)
(w)
file
/StandardEncoding
writestring
但它(显然)不起作用/ StandardEncoding不是字符串。我如何将这样的矢量打印到标准输出?
答案 0 :(得分:7)
简单的。
StandardEncoding ==
或使用指数。十进制:
0 StandardEncoding { exch dup =only(: )print 1 add exch == } forall pop
八路:
0 StandardEncoding { exch dup 8 3 string cvrs =only(: )print 1 add exch == } forall pop
十六进制:
0 StandardEncoding { exch dup 16 2 string cvrs =only(: )print 1 add exch == } forall pop
此外,您应该知道/StandardEncoding
是文字名称(因为/
),因此名称本身就位于堆栈上。如果您已经进入下一步并转换为字符串,则只需打印“StandardEncoding”一词。因此,要自动加载(并可能执行)与名称关联的值,请删除斜杠(/
),使名称为 executable 。单词StandardEncoding
(没有斜线!)成为向量。斜杠与Lisp族语言中的quote
非常相似。
为了说明,这里有一些打印东西和迭代数组的方法。
StandardEncoding {
(%stdout)(w)file exch 80 string cvs writestring
(%stdout)(w)file (\n) writestring
} forall
StandardEncoding
0 1 2 index length 1 sub { % Arr i
2 copy get 80 string cvs print % Arr i
(\n) print % Arr i
pop % Arr
} for
[ StandardEncoding 0 {
{
2 copy get ==only
()=
1 add
} loop
} stopped cleartomark
最后一个使用无限循环并捕获rangecheck
尝试读取不存在的元素时发出信号的get
错误。它会在堆栈上留下5个值(StandardEncoding 256 StandardEncoding 256 true
),您可以使用cleartomark
放弃,如图所示,或只是pop pop pop pop pop
(或5{pop}repeat
)。
编辑:进一步播放最后一个示例。这会将错误捕获隔离到预期会抛出错误的运算符。隔离预期的错误可以让任何意外的错误打印出常用的诊断信息。
[ StandardEncoding 0 {
2 copy
{ get } stopped { exit } if
==only ()=
1 add
} loop cleartomark
答案 1 :(得分:1)
您可以使用“==”和“forall”:
([) =
StandardEncoding { == } forall
(]) =