"引数として与えられた関数を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乗で増えていくのね。混乱した。