我的问题与以下代码有关:
(define (cons. x y)
(lambda (m) (m x y)))
(define (car. z)
(z (lambda (p q) p)))
我的问题在于此代码的实际工作方式。据我所知,利弊。正在返回一个包含其范围内的变量x和y的过程。汽车。然后从cons中获取返回的过程。并将其应用于另一个带有两个参数p和q并返回p的lambda。我的困惑在于第二个lambda,P和Q的值究竟来自哪个?
答案 0 :(得分:7)
变量p
和q
是“缺点单元格”的两个元素;即,它们是x
中的y
和cons.
。如果您运行(car. (cons. 1 2))
,则会获得(展开cons.
):
(car. (lambda (m) (m 1 2))
变成(使用car.
的定义):
((lambda (m) (m 1 2)) (lambda (p q) p))
将参数插入第一个lambda
的正文中,您得到:
((lambda (p q) p) 1 2)
这样的另一个替换会给你1
,这是“利弊细胞”的第一个元素。