有人能解释一下以下代码中的两个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'在上面的代码中?
答案 0 :(得分:1)
根据if
条件,我们会返回一个或另一个lambda
,然后立即应用它(请注意{左侧}的双开括号{1}})。第一个if
返回调用递归的结果,第二个lambda
lambda
返回调用递归结果的元素,无论是调用递归的方式。 cons
只是y
的参数名称,它绑定到lambda
的值。整个事情等同于此,事实上它应该是这样编写的,而不是当前的,过于复杂的形式:
(remove x (cdr ls))