理系学生日記

おまえはいつまで学生気分なのか

問題1-41

"引数として与えられた関数を2回適用する"ような関数doubleを定義しろとか言う問題です。
doubleは超短い関数。

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

これで

gosh> (((double (double double)) inc) 5)
21

とかなるのですが、(double double)ではdoubleを2回適用する関数が返されて、(double (double double))では、(double double)を2回適用する関数、つまりdoubleを4回適用する関数が返されます。そのdoubleを4回適用する関数に対してincというインクリメント関数が渡されているので、incは2^4=16回適用されることになる。5+16=21ってことか。


最初incの回数は×2で増えていくと思ってたのだけども、2乗で増えていくのね。混乱した。