题目要求我们为两个不同的 make-frame
实现提供适当的选择函数。
定义:
;;; 47-frame-represent-using-list.scm
(define (make-frame origin edge1 edge2)
(list origin edge1 edge2))
(define (origin-frame f)
(car f))
(define (edge1-frame f)
(cadr f))
(define (edge2-frame f)
(caddr f))
测试:
1 ]=> (load "47-frame-represent-using-list.scm")
;Loading "47-frame-represent-using-list.scm"... done
;Value: edge2-frame
1 ]=> (load "46-vect-represent.scm") ; 还需要练习 46 的向量表示
;Loading "46-vect-represent.scm"... done
;Value: ycor-vect
1 ]=> (define f (make-frame (make-vect 0.0 0.0) ; origin
(make-vect 0.3 0.3) ; edge1
(make-vect 0.6 0.6))) ; edge2
;Value: f
1 ]=> (origin-frame f)
;Value 11: (0. 0.)
1 ]=> (edge1-frame f)
;Value 12: (.3 .3)
1 ]=> (edge2-frame f)
;Value 13: (.6 .6)
定义:
;;; 47-frame-represent-using-cons.scm
(define (make-frame origin edge1 edge2)
(cons origin
(cons edge1 edge2)))
(define (origin-frame f)
(car f))
(define (edge1-frame f)
(cadr f))
(define (edge2-frame f)
(cddr f))
测试:
1 ]=> (load "47-frame-represent-using-cons.scm")
;Loading "47-frame-represent-using-cons.scm"... done
;Value: edge2-frame
1 ]=> (load "46-vect-represent.scm") ; 还需要练习 46 的向量表示
;Loading "46-vect-represent.scm"... done
;Value: ycor-vect
1 ]=> (define f (make-frame (make-vect 0.0 0.0) ; origin
(make-vect 0.3 0.3) ; edge1
(make-vect 0.6 0.6))) ; edge2
;Value: f
1 ]=> (origin-frame f)
;Value 11: (0. 0.)
1 ]=> (edge1-frame f)
;Value 12: (.3 .3)
1 ]=> (edge2-frame f)
;Value 13: (.6 .6)