※問題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。