为什么第一个值在列表中未绑定

时间:2017-03-14 16:09:45

标签: scheme

以下代码显示三元组列表中的每个元素。

`(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`

任何人都可以帮助我理解为什么第一个元素未定义?

1 个答案:

答案 0 :(得分:1)

你这里有一个错字:

((eq? m 'frist) x)

应该是:

((eq? m 'first) x)