SICP 2.50

transform-painterが定義済みという前提で解答するのはとても簡単。transform-painterを作るのは難しい。
transform-painterの定義がSICPと違うけど、まぁ良いか。

(load "../psets/go.scm")

(define flip-horiz
  (transform-painter (make-vect 1.0 0.0)
                     (make-vect 0.0 0.0)
                     (make-vect 1.0 1.0)))

(define rotate-180-digree
  (transform-painter (make-vect 1.0 1.0)
                     (make-vect 0.0 1.0)
                     (make-vect 1.0 0.0)))

(define rotate-270-digree
  (transform-painter (make-vect 0.0 1.0)
                     (make-vect 0.0 0.0)
                     (make-vect 1.0 1.0)))

; test
(paint-g1 (flip-horiz wave))
(paint-g1 (rotate-180-digree wave))
(paint-g1 (rotate-270-digree wave))

上からオリジナルのwave, flip-horiz, rotate-180-digree, rotate-270-digree