理系学生日記

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

忍者TOOLS

問題1-43

f(f(\cdots (f(x))\cdots))のようにf(x)をn回作用させる関数を返す関数をかく。

(define (compose f g)
  (lambda (x)
    (f (g x))))

(define (repeated f n)
  (define (sub-repeated n)
    (if (= n 0)
	f
	(compose f (sub-repeated (- n 1)))))
  (lambda (x)
    ((sub-repeated (- n 1)) x)))

とやればいいのかな。(- n 1)がきたないので、たぶん他のスマートな方法はあるはずだけど。

gosh> ((repeated square 2) 5)
625

とりあえず動く。