問題2.51 – SICP(計算機プログラムの構造と解釈)その65

問題2.51

手続き below は、2つのペインタを引数にとり、第1のペインタをフレームの下半分に、第2のペインタをフレームの上半分に表示する

transform-painter を使った場合

(define (below painter1 painter2)
  (let ((split-point (make-vect 0.0 0.5)))
       (let ((paint-bottom
               (transform-painter painter1
                                  (make-vect 0.0 0.0)
                                  (make-vect 1.0 0.0)
                                  split-point))
             (paint-top
               (transform-painter painter2
                                  split-point
                                  (make-vect 1.0 0.5)
                                  (make-vect 0.0 1.0))))
            (lambda (frame)
                    (paint-bottom frame)
                    (paint-top frame)))))

beside と回転演算を使った場合

SICP 問題2.51 beside と回転演算を使った below

(define (below painter1 painter2)
  (let ((rotated-painter1 (rotate270 painter1))
        (rotated-painter2 (rotate270 painter2)))
       (let ((besided-frame (beside rotated-painter1 rotated-painter2)))
            (rotate90 besided-frame))))

結果は双方とも同じ。

((below wave wave) canvas-frame)
gosh> 140.0,170.0,160.0,200.0
260.0,170.0,240.0,200.0
140.0,170.0,160.0,130.0
260.0,170.0,240.0,130.0
240.0,130.0,300.0,130.0
160.0,130.0,120.0,130.0
300.0,130.0,400.0,70.0
240.0,90.0,400.0,30.0
240.0,90.0,300.0,0.0
200.0,60.0,240.0,0.0
120.0,130.0,60.0,120.0
120.0,120.0,60.0,80.0
60.0,120.0,0.0,170.0
60.0,80.0,0.0,130.0
120.0,120.0,140.0,100.0
140.0,100.0,100.0,0.0
200.0,60.0,160.0,0.0
140.0,370.0,160.0,400.0
260.0,370.0,240.0,400.0
140.0,370.0,160.0,330.0
260.0,370.0,240.0,330.0
240.0,330.0,300.0,330.0
160.0,330.0,120.0,330.0
300.0,330.0,400.0,270.0
240.0,290.0,400.0,230.0
240.0,290.0,300.0,200.0
200.0,260.0,240.0,200.0
120.0,330.0,60.0,320.0
120.0,320.0,60.0,280.0
60.0,320.0,0.0,370.0
60.0,280.0,0.0,330.0
120.0,320.0,140.0,300.0
140.0,300.0,100.0,200.0
200.0,260.0,160.0,200.0
#<undef>

出力結果を "図形言語 描画スクリプト(with Canvas and JavaScript)" のテキストエリアにコピペして描画させることができます。

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»