SICP 習題 1.43 是前面兩道題的延續,習題要求我們定義一個過程(repeat f n) ,其中f是一個單參數過程,題目要求我們通過repeat過程將過程f調用n次,注意是嵌套調用n次,不是連續調用n次。就是說結果應該是(f ( f ( … (f x) …))),而不是(begin (f x) (f x) (f x) … (f x))。
題目還提醒我們使用習題1.42所定義的compose方法。
仔細想想的話這一工作可以通過遞歸調用完成,就是(repeat f n) 等於 (compose f (repeat f (- n 1)),就是說n次嵌套調用f可以轉換成(f (<n-1次嵌套調用f))。
理解了這一點後就比較容易了,控制好遞歸調用的結束就可以了,代碼如下:
(define (repeat f n)
(define (repeat-inner f cur-n)
(if (< cur-n n)
(compose f (repeat-inner f (+ cur-n 1)))
f ))
(repeat-inner f 1))