問題2.51 – SICP(計算機プログラムの構造と解釈)その65
2009年01月10日
問題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
と回転演算を使った場合
(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)" のテキストエリアにコピペして描画させることができます。
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542