2

ファクターコードでrepeatという関数を作成しようとしています。この関数は、負でない整数nとそれに続く引用符qを期待しています。これにより、qとnがスタックからポップされ、qの内容がn回実行されます。

したがって、コードが

[drop] 5 repeat

実行されると、スタックの一番上に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 に答える