SICP 習題 (1.43)解題總結

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章