252 words
1 minute
scheme-2.1.3
2026-09-01

Some information may be outdated

数据意味着什么#

  • 一组适当的选择函数构造函数,以及使这些过程成为一套合法表示,它们就必须满足的一组特定条件。
  • 抽象数据的”身份”来自它提供的行为,而不是来自它内部的表示。

一个实例#

(define (cons x y)
(define (dispatch m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 -- CONS" m))))
dispatch)
;;上面的过程等价于下面的过程:
;;1
(define (cons x y)
(define dispatch
(lambda (m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 -- CONS" m)))))
dispatch)
;;2
(define (cons x y)
(lambda (m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 -- CONS" m)))))
(define (car z) (z 0))
(define (cdr z) (z 1))

当执行(car (cons 2 3))变成((cons 2 3) 0),(cons 2 3)返回的是一个过程:dispatch,在过程dispatch内部,它记住了:x = 2,y = 3,当参数m0时,返回 2。同理过程(cdr (cons 2 3))也是相同的道理。

scheme-2.1.3
https://www.infini.cv/posts/scheme/scheme-213/
Author
infini
Published at
2026-09-01
License
CC BY-SA 4.0