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>
おっけい。以上!