我正在尝试在因子代码中创建一个名为repeat的函数,它需要一个非负整数n和它后面的引号q。它导致q和n从堆栈中弹出,然后q的内容执行n次。
所以if代码
[drop] 5 repeat
被执行后会将drop应用于堆栈顶部5次。
我想知道是否有可能在因子代码中写这个或者我是否必须编辑解释器并将重复添加为新功能?
答案 0 :(得分: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