252 words
1 minute
scheme-2.1.3
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,当参数m为0时,返回 2。同理过程(cdr (cons 2 3))也是相同的道理。
scheme-2.1.3
https://www.infini.cv/posts/scheme/scheme-213/