所以,从SICP我们知道cons
car
andcdr
可以定义为一个过程:
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
但是预定义的过程list
,它接受参数来构建一个列表,使用原始的cons
. 这意味着,list
构建的列表不是我想要的过程。
(car (list 1 2 3))
;The Object (1 2 3) is not applicable
所以我写这个:
(define (list . l)
(if (null? l)
'()
(cons (original-car l)
(list (original-cdr l)))))
我只是想知道如何定义original-car
and original-cdr
。有什么方法可以复制 Scheme 中的程序吗?或者有一些替代方法可以解决这个问题。谢谢