要了解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 --.