問題解答
問2.46
(define (make-vect x y) (cons x y)) (define (xcor-vect v) (car v)) (define (ycor-vect v) (cdr v)) (define (add-vect v1 v2) (make-vect (+ (xcor-vect v1) (xcor-vect v2)) (+ (ycor-vect v1) (ycor-vect v2)))) (define (sub-vect v1 v2) (make-vect (- (xcor-vect v1) (xcor-vect v2)) (- (ycor-vect v1) (ycor-vect v2)))) (define (scale-vect v s) (make-vect (* s (xcor-vect v)) (* s (ycor-vect v)))) (define v1 (make-vect 1 2)) (define v2 (make-vect 2 1)) (xcor-vect v1) (ycor-vect v1) (add-vect v1 v2) (sub-vect v1 v2) (scale-vect v1 5)
問2.47
方法1
(define (make-frame origin edge1 edge2) (list origin edge1 edge2)) (define (frame-origin frame) (list-ref frame 0)) (define (frame-edge1 frame) (list-ref frame 1)) (define (frame-edge2 frame) (list-ref frame 2))
方法2
(define (make-frame origin edge1 edge2) (cons origin (cons edge1 edge2))) (define (frame-origin frame) (car frame)) (define (frame-edge1 frame) (cadr frame)) (define (frame-edge2 frame) (cddr frame))
本文
ペインタ
フレームに合うように画像を描画する手続き
問題解答
問2.48
(define (make-segment v1 v2) (cons v1 v2)) (define (start-segment seg) (car v1)) (define (end-segment seg) (cdr v1))
問2.49
a.
(define (outline-painter) (segments->painter (list (make-segment (make-vect 0 0) (make-vect 1 0)) (make-segment (make-vect 1 0) (make-vect 1 1)) (make-segment (make-vect 1 1) (make-vect 0 1)) (make-segment (make-vect 0 1) (make-vect 0 0)))))
以下、やることは同じなので略。