要了解base-execute
您需要了解的内容execute
和BASE
. 我还将解释如何阅读i*x
和j*x
在堆栈效应中。
execute
通过获取执行令牌xt
并执行它来工作。和自己' 1+ execute
一样。1+
但是,使用 的原因execute
是因为您可以传递xt
堆栈,而不必提前选择它。例如:
: exec-twice dup >r execute r> execute ;
2 ' 1+ exec-twice . ( this outputs 4 )
BASE
是一个变量,它控制用于输入和输出的数字基数。
BASE
最初是 10。所以5 2 BASE ! .
输出101
(以 2 为底数为 5)。
base-execute
将它们放在一起:它更改BASE
为u
,执行xt
,然后恢复BASE
到之前的值。它的实现可能如下所示:
: base-execute BASE @ >r BASE ! execute r> BASE ! ;
这是一个示例用法:
: squared ( n1 -- n2 ) dup * ;
: squares ( n -- ) 0 do i squared . loop ;
10 squares ( 0 1 4 9 16 25 36 49 64 81 )
: hex-execute ( i*x xt -- j*x ) 16 base-execute ;
10 ' squares hex-execute ( 0 1 4 9 10 19 24 31 40 51 )
10 squares ( 0 1 ... 81 we're back to decimal )
现在为i*x xt u -- j*x
:
您链接到的堆栈符号文档包含阅读效果所需的大部分信息。i*x -- j*x
意味着堆栈可能会发生某些事情,但它没有指定是什么。在这种情况下,确切的堆栈效应取决于是什么xt
。
要知道给定 的堆栈效应xt
,请将i*x
和替换为' 堆栈效应j*x
的两侧。xt
例如,如果xt
是,' .
您将查看.
的堆栈效应,即n --
. 在这种情况下,您可以将base-execute
' 堆栈效应视为n xt-of-. u --
.