SICP 習題1.44 要求我們實現一個平滑函數的過程,和以往一樣,如果你太在意平滑函數的數學定義你就輸了。簡單的辦法就是直奔平滑函數的要求,其實就是給我們一個不清楚細節的函數f,要求我們返回一個過程專門計算(f (+ x dx)) , (f x) , (f (- x dx))的平均值。其中dx是事先定義好的一個很小的數,比如0.001。
這就比較簡單了,直接實現如下:
(define (smooth f)
(lambda (x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3)))
如果希望對一個過程進行多次平滑處理,可以結合之前的repeat過程多次調用smooth過程,代碼如下:
(define (n-smooth f n)
((repeat smooth n) f))