SICP 問題1.41

2017-09-04

※問題1.37, 38, 39, 40はスキップ。

引数として一引数の手続きをとり, 受け取った手続きを二回作用させる手続きを返す手続きdoubleを定義せよ.
例えばincが引数に1を足す手続きとすれば, (double inc)は2を足す手続きとなる.

(((double (double double)) inc) 5)

はどういう値を返すか.

定義。

(define (double f)
  (lambda (x) (f (f x))))

解く

double は引数として受け取った関数を2回作用させる。ということは (double double) の部分は、2の2乗=4回作用させる。さらにそれの double なので、4の2乗=16回作用させる。次に引数として inc が来てるので、 inc を16回作用させるので、答えは21。