有没有一种方法可以通过Forth中的索引访问堆栈中的元素,而不弹出其上方的所有元素?
例如,如果我将数字1到1000推送到堆栈中,我如何获得第500个元素?
500 PICK
将在Forth79中将元素500从堆栈向下复制到堆栈的顶部。
更相关的是:PICK是ISO93 Forth的核心扩展词集,是当前标准的基础。本标准中PICK的定义基于0,例如"0 PICK"等同于"DUP"。参见第6.2.2030节
如果您使用的Forth没有PICK,您可以将其定义为
: PICK ?DUP IF SWAP >R 1- RECURSE R> SWAP EXIT THEN DUP ;
(当然,迭代版本也是可能的。)