最简单的。
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”。因此,要自动加载(并可能执行)与名称关联的值,请删除斜杠 ( /
),以便名称是可执行的。单词StandardEncoding
(没有斜线!)成为向量。斜线的工作方式很像quote
Lisp 系列语言。
为了说明,这里有更多的方法来打印和迭代数组。
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