問題2.45

こちらも上で定義した。

(define (split f1 f2)
  (lambda (painter n)
    (if (= n 0)
        painter
        (let ((smaller ((split f1 f2) painter (- n 1))))
        (f1 painter (f2 smaller smaller))))))

(define right-split (split beside below))
(define up-split (split below beside))

;splitでは、渡すlambdaのなかで再帰するという、ちょっと面白いけど無駄に見えることをやっている。(実際毎回lambdaで関数が作られるので無駄だろう)
;if文はスペシャルフォームなので、(= n 0)の時点で、up-splitの再帰も止まってくれる。