2012-05-22 50 views
2

我試圖在因子代碼中創建一個名爲repeat的函數,它需要一個非負整數n和後面的引號q。它會導致q和n從棧中彈出,然後q的內容執行n次。是否可以在因子代碼中創建重複函數?

所以如果代碼

[drop] 5 repeat 

被執行它將適用下降到堆棧5倍的頂部。

我想知道是否可以在因子代碼中編寫此代碼,或者我將不得不編輯解釋程序並添加重複作爲新功能的方式?

+0

這是爲什麼標籤哈斯克爾? – dave4420

+0

解釋器是用Haskell編寫的。但我只想知道在嘗試編輯解釋器之前是否可以在因子代碼中實現此功能。 – PriestVallon

回答

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 
相關問題