SICPを読む(30) 1.3.4(1) 値として返される手続き

(define (square x)
  (* x x))

(define (average a b)
  (/ (+ a b) 2))

(define (average-dump f)
  (lambda (x) (average x (f x))))

((average-dump square) 10)

感動した。

関数から新たな関数を生み出してるよ!!

展開すると、

((average-dump square) 10)

((lambda (x) (average x (square x))) 10) ; 新たな関数を作った

((lambda (x) (average x (* x x))) 10)

((lambda (x) (/ (+ x (* x x)) 2)) 10)

55

こ・これがSchemeって奴か・・・

もっと早くSICP読めば良かったorz