理系学生日記

おまえはいつまで学生気分なのか

問題2-43 (2.2.4 Example: A Picture Language)

ようやく図形言語にはいったんですけど、また図は書けないので残念です。
そういうわけでこのプログラムも動かせない。

(define (up-split painter n)
  (if (= n 0)
      painter
      (let ((smaller (up-split painter (- n 1))))
	(below painter (beside smaller smaller)))))

追記

id:higeponが図形描画用のソースをおいてくれていました.

というわけでこれを使って確認。

確認するためにこんなラッパを作る。
ほとんど丸写しなんですけど、後々使い回せるようにpainterを適当にいじる関数を渡すようにした。

(define (make-display f)
  (lambda ()
    (define monar (segments->painter segments))
    (gl-clear GL_COLOR_BUFFER_BIT)
    (gl-color 0.0 0.0 0.0)
    (gl-begin GL_LINES)
    ((f monar) frame)
    (gl-end)
    (gl-flush)
    )
)

ヤケになったので、mainも作る。

(define (make-main callback)
  (lambda (args)
  (glut-init args)
  (glut-init-display-mode GLUT_RGBA)
  (glut-init-window-size 350 240)
  (glut-create-window "picture language sample")
  (glut-display-func callback)
  (init)
  (glut-main-loop)
  )
)
(define main (make-main (make-display (lambda (monar) (up-split monar 4)))))


こんな感じのモナーができたよ!