2008-10-30 15 views
1

有人熟悉這個嗎?計算函數的第n次重複應用的方案過程?

編寫需要作爲輸入 ,其計算f和一個 正整數n,並返回該過程 ,計算f的第n個 重複應用的順序的過程。該 程序應該能夠被用作 如下:

((repeated square 2) 5) 
625 

我知道,我已經爲函數的組合創建了下面的代碼將有助於使解決方案更加簡單,但我不知道這裏要去的地方:

(define (compose f g) (lambda (x) (f (g x)))) 

回答

1

那麼,你可能想要這樣的東西吧?

((repeated square 3) 5) 
-> (square ((repeated square 2) 5)) 
-> (square (square ((repeated square 1) 5))) 
-> (square (square (square ((repeated square 0) 5)))) 
-> (square (square (square (identity 5)))) 

(我不知道identity是否在計劃預定義的。如果沒有,很容易寫。)

現在,這不是直接可重複的,因爲你不能神奇的外封裝代碼用任意東西撥打repeated。但是,使用compose重寫時,這些縮減步驟會是什麼樣子?你能在結果列表中找出一個模式並重現它嗎?

0
(define (repeated f n) 
    (if (zero? n) 
    identity 
    (lambda (x) ((repeated f (- n 1)) (f x))))) 

,或者,如果你堅持要用 「撰寫」:

(define (repeated f n) 
    (if (zero? n) 
    identity 
    (compose (repeated f (- n 1)) f)))