Можно ли создать функцию повтора в коде фактора?

Я пытаюсь создать функцию в коде фактора с именем repeat, которая ожидает неотрицательное целое число n и кавычка q после него. Это приводит к тому, что q и n выталкиваются из стека, а затем содержимое q выполняется n раз.

Так что, если код

[drop] 5 repeat

было выполнено, это применило бы падение к вершине стека 5 раз.

Мне было интересно, можно ли написать это в коде фактора, или мне придется редактировать интерпретатор и добавлять повтор как новую функцию таким образом?

1 ответ

Решение

Использование рекурсии:

: 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
Другие вопросы по тегам