SICP 2.51

2つのpainterをどうやって重ね合わせたらいいのかと思ったら、続けて呼び出せば良いだけだった。

(load "2.50.scm")

(define (below1 painter1 painter2)
  (let ((upper (transform-painter (make-vect 0.0 0.5)
                                  (make-vect 1.0 0.5)
                                  (make-vect 0.0 1.0)))
        (lower (transform-painter (make-vect 0.0 0.0)
                                  (make-vect 1.0 0.0)
                                  (make-vect 0.0 0.5))))
    (lambda (frame)
      ((lower painter1) frame)
      ((upper painter2) frame))))

(define (below2 painter1 painter2)
  (let ((right (rotate-270-digree painter1))
        (left (rotate-270-digree painter2)))
    (rotate-180-digree (rotate-270-digree (beside right left)))))

; test
(paint-g1 (below1 wave (beside wave wave)))
(paint-g1 (below2 wave (beside wave wave)))