Scheme 程序中的Lambda

Scheme 程序中的Lambda,scheme,mit-scheme,Scheme,Mit Scheme,有人能解释一下下面代码中的两个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,然后立即应用它(注意i

有人能解释一下下面代码中的两个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
,然后立即应用它(注意
if
左侧的双圆括号)。第一个
lambda
返回调用递归的结果,第二个
lambda
cons
将一个元素添加到调用递归的结果中,无论以何种方式调用递归。
y
只是
lambda
s的参数名,它绑定到
(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)))))))