过程中的 Lambda
Lambda in the procedure
有人可以向我解释一下以下代码中的两个 lambda 语句发生了什么吗?
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
((if (eqv? x h)
(lambda (y) y)
(lambda (y) (cons h y)))
(remove x (cdr ls))))))
上面代码中的'y'是什么?
根据 if
的条件,我们返回一个或另一个 lambda
然后立即应用它(注意 [=11= 左边的双左括号]).第一个 lambda
returns 调用递归的结果,第二个 lambda
cons
将一个元素添加到调用递归的结果中,无论哪种方式调用递归。 y
只是 lambda
的参数名称,它绑定到 (remove x (cdr ls))
的值。整个事情就相当于这样,实际上应该这样写,而不是现在那种过于复杂的形式:
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
(if (eqv? x h) ; using `equal?` would be a better idea
(remove x (cdr ls))
(cons h (remove x (cdr ls)))))))
有人可以向我解释一下以下代码中的两个 lambda 语句发生了什么吗?
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
((if (eqv? x h)
(lambda (y) y)
(lambda (y) (cons h y)))
(remove x (cdr ls))))))
上面代码中的'y'是什么?
根据 if
的条件,我们返回一个或另一个 lambda
然后立即应用它(注意 [=11= 左边的双左括号]).第一个 lambda
returns 调用递归的结果,第二个 lambda
cons
将一个元素添加到调用递归的结果中,无论哪种方式调用递归。 y
只是 lambda
的参数名称,它绑定到 (remove x (cdr ls))
的值。整个事情就相当于这样,实际上应该这样写,而不是现在那种过于复杂的形式:
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
(if (eqv? x h) ; using `equal?` would be a better idea
(remove x (cdr ls))
(cons h (remove x (cdr ls)))))))