2

我正在尝试在因子代码中创建一个名为 repeat 的函数,该函数需要一个非负整数 n 并在其后加上引号 q。它导致 q 和 n 从堆栈中弹出,然后 q 的内容执行 n 次。

所以如果代码

[drop] 5 repeat

被执行它会应用 drop 到栈顶 5 次。

我想知道是否可以在因子代码中编写它,或者我是否必须编辑解释器并以这种方式添加重复作为新函数?

4

1 回答 1

4

使用递归:

: repeat ( quot n -- ) dup 0 > [ over 2dip 1 - repeat ] [ 2drop ] if ; inline

使用循环:

: repeat ( quot n -- ) [ dup 0 > ] [ over 2dip 1 - ] while 2drop ; inline

最后,使用预定义的词汇单词times

: repeat ( quot n -- ) swap times ; inline
于 2012-07-19T11:51:08.757 回答