cons car cdr 的一个小实现
> (define (car x)
(x 0))
> (define (cdr x)
(x 1))
> (define (cons x y)
(define (tem z)
(cond ((= 0 z) x)
((= 1 z) y)))
tem
)
> (car (cons 1 2))
1
> (cdr (cons 1 2))
2没有使用新的语法就实现了用cons car cdr 表示的序对。
而
(car (cons 1 2)) 返回 1可以用其他方法实现
> (define (cons x y)
(lambda (z) (z x y)))
> (define (car z)
(z (lambda (p q) p)))
> (car (cons 1 2))
1序对的一种应用
例:
用car cdr cons 表示2a + 3b
用非负数表示
> (define (cons a b)
(lambda (z) (z a b)))
> (define (car z)
(z (lambda (p q) (* p 2))))
> (car (cons 1 2))
2
> (define (cdr z)
(z (lambda (p q) (* q 3))))
> (cdr (cons 1 2))
6
> (define (add x)
(+ (car x) (cdr x)))
> (add (cons 1 2))
8
> (add (cons 2 3))
13scheme 利用过程来性表达一些数据的复合能力
这种有关的程序设计风格通常称为 消息传递。
然而也体现了scheme的数据与程序的模糊性
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!