SICP 問題 2.47(フレームの選択子を定義する)
問題
フレームの構成子に候補が二つある:
;候補1 (define (make-frame origin edge1 edge2) (list origin edge1 edge2)) ;候補2 (define (make-frame origin edge1 edge2) (cons origin (cons edge1 edge2)))
構成子のそれぞれに、フレームの実装となる適切な選択子を作れ。
解答
候補1の選択子。
(define (frame-origin frame) (car frame)) (define (frame-edge1 frame) (cadr frame)) (define (frame-edge2 frame) (caddr frame))
では実験。あ、但し各要素(origin、edge1、edge2)は確認したいだけなのでベクタにはしてません。
gosh> (define f1 (make-frame 1 2 3))
f1
gosh> f1
(1 2 3)
gosh> (frame-origin f1)
1
gosh> (frame-edge1 f1)
2
gosh> (frame-edge2 f1)
3
gosh>
次。候補2の選択子。
(define (frame-origin frame) (car frame)) (define (frame-edge1 frame) (cadr frame)) (define (frame-edge2 frame) (cddr frame))
こちらも実験。
おっけい。以上!
gosh> (define f2 (make-frame 4 5 6))
f2
gosh> f2
(4 5 . 6)
gosh> (frame-origin f2)
4
gosh> (frame-edge1 f2)
5
gosh> (frame-edge2 f2)
6
gosh>