(define (split compose-large compose-small) (define (splitter painter n) (if (= n 0) painter (let ((smaller (splitter painter (- n 1)))) (compose-large painter (compose-small smaller smaller))))) splitter) (define right-split (split beside below)) (define up-split (split below beside))
In action:
(paint (right-split einstein 2)) ;; (paint ((split beside below) einstein 2))
(paint (up-split einstein 2)) ;; (paint ((split below beside) einstein 2))