以下代码显示三元组列表中的每个元素。
`(define (triplet x y z)
(define (set-x! v) (set! x v))
(define (set-y! v) (set! y v))
(define (set-z! v) (set! z v))
(define (dispatch m)
(cond ((eq? m 'frist) x)
((eq? m 'second) y)
((eq? m 'third) z)
((eq? m 'set-first!) set-x!)
((eq? m 'set-second!) set-y!)
((eq? m 'set-third!) set-z!)))
dispatch)
(define (first z) (z 'first))
(define (second z) (z 'second))
(define (third z) (z 'third))
(define (set-first! z new-value1)
((z 'set-first!) new-value1)
z)
(define (set-second! z new-value2)
((z 'set-second!) new-value2)
z)
(define (set-third! z new-value3)
((z 'set-third!) new-value3)
z)`
这是给出
结果的代码`Created a triple with value 1 2 and 3
Displaying first: #<void>
Displaying second 2
Displaying third 3`
任何人都可以帮助我理解为什么第一个元素未定义?
答案 0 :(得分:1)
你这里有一个错字:
((eq? m 'frist) x)
应该是:
((eq? m 'first) x)