2008-10-30 73 views
1

如果f是一個數值函數,而n是一個正整數,那麼我們可以形成f的第n次重複應用,它被定義爲在x處的值爲f(f(...(f X))...))。例如,如果f是函數x + 1,那麼f的第n次重複應用就是函數x + n。如果f是對數字進行平方運算,則f的第n次重複應用是將其論點提升到2^n次冪的函數。編寫一個程序,該程序將一個計算f和一個正整數n的程序作爲輸入,並返回計算f的第n次重複應用程序。你的程序應該能夠被用作如下:在Scheme中重複應用函數?

((repeated square 2) 5) 
625 

你可以使用這個簡化的答案:

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

回答

1

你剛纔刪除和reask這個問題?我在這裏複製我以前的答案(謝天謝地,我的瀏覽器緩存了它):

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

((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)))) 

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

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

1
(define (repeated f n) 
    (if (= n 1) 
     f 
     (compose f (repeated f (- n 1)))))