問題解析
どうも segments->painter が戻す手続きが微妙な模様。
# てか stack trace 見たらそこっちゃソコなんですが
(define (segments->painter segment-list) (lambda (frame) (for-each (lambda (segment) (draw-line ((frame-coord-map frame) (start-segment segment)) ((frame-coord-map frame) (end-segment segment)))) segment-list)))
戻す手続きが呼び出される時、segment-list が #
(#
# # # # # # # # # # # # # # # # )
みたいな出力。
ちなみに
上記の手続き呼び出す部分は以下なカンジ。
(define l1 (make-segment (make-vect 0.0 0.5) (make-vect 0.2 0.3))) (define l2 (make-segment (make-vect 0.2 0.3) (make-vect 0.3 0.5))) (define l3 (make-segment (make-vect 0.3 0.5) (make-vect 0.4 0.4))) (define l4 (make-segment (make-vect 0.4 0.4) (make-vect 0.3 0.0))) (define l5 (make-segment (make-vect 0.4 0.0) (make-vect 0.5 0.2))) (define l6 (make-segment (make-vect 0.5 0.2) (make-vect 0.6 0.0))) (define l7 (make-segment (make-vect 0.7 0.0) (make-vect 0.6 0.4))) (define l8 (make-segment (make-vect 0.6 0.4) (make-vect 1.0 0.3))) (define l9 (make-segment (make-vect 1.0 0.4) (make-vect 0.7 0.6))) (define la (make-segment (make-vect 0.7 0.6) (make-vect 0.6 0.6))) (define lb (make-segment (make-vect 0.6 0.6) (make-vect 0.7 0.8))) (define lc (make-segment (make-vect 0.7 0.8) (make-vect 0.6 1.0))) (define ld (make-segment (make-vect 0.4 1.0) (make-vect 0.3 0.8))) (define le (make-segment (make-vect 0.3 0.8) (make-vect 0.4 0.6))) (define lf (make-segment (make-vect 0.4 0.6) (make-vect 0.3 0.6))) (define lg (make-segment (make-vect 0.3 0.6) (make-vect 0.2 0.5))) (define lh (make-segment (make-vect 0.2 0.5) (make-vect 0.0 0.8))) (define p (segments->painter (list l1 l2 l3 l4 l5 l6 l7 l8 l9 la lb lc ld le lf lg lh))) (define f (make-frame (make-vect -1.0 -1.0) (make-vect 2.0 0) (make-vect 0 2.0))) (p f)
む。for-each の前じゃなくて lambda 式の前に print 入れたらどうなる? という事で試してみたらやはり #
で、let で、な実装にしたら出力されました。
(define (stub-proc) (let ((l1 (make-segment (make-vect 0.0 0.5) (make-vect 0.2 0.3))) (l2 (make-segment (make-vect 0.2 0.3) (make-vect 0.3 0.5))) (l3 (make-segment (make-vect 0.3 0.5) (make-vect 0.4 0.4))) (l4 (make-segment (make-vect 0.4 0.4) (make-vect 0.3 0.0))) (l5 (make-segment (make-vect 0.4 0.0) (make-vect 0.5 0.2))) (l6 (make-segment (make-vect 0.5 0.2) (make-vect 0.6 0.0))) (l7 (make-segment (make-vect 0.7 0.0) (make-vect 0.6 0.4))) (l8 (make-segment (make-vect 0.6 0.4) (make-vect 1.0 0.3))) (l9 (make-segment (make-vect 1.0 0.4) (make-vect 0.7 0.6))) (la (make-segment (make-vect 0.7 0.6) (make-vect 0.6 0.6))) (lb (make-segment (make-vect 0.6 0.6) (make-vect 0.7 0.8))) (lc (make-segment (make-vect 0.7 0.8) (make-vect 0.6 1.0))) (ld (make-segment (make-vect 0.4 1.0) (make-vect 0.3 0.8))) (le (make-segment (make-vect 0.3 0.8) (make-vect 0.4 0.6))) (lf (make-segment (make-vect 0.4 0.6) (make-vect 0.3 0.6))) (lg (make-segment (make-vect 0.3 0.6) (make-vect 0.2 0.5))) (lh (make-segment (make-vect 0.2 0.5) (make-vect 0.0 0.8)))) (let ((p (segments->painter (list l1 l2 l3 l4 l5 l6 l7 l8 l9 la lb lc ld le lf lg lh))) (f (make-frame (make-vect -1.0 -1.0) (make-vect 2.0 0) (make-vect 0 2.0)))) (p f))))
とほほ。てか何故に define 使ってたのかと小一時間 (ry
wave くんは無事に出力されております。