Lambda在程序中

时间:2017-07-31 15:32:34

标签: 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'在上面的代码中?

1 个答案:

答案 0 :(得分:1)

根据if条件,我们会返回一个或另一个lambda,然后立即应用它(请注意{左侧}的双开括号{1}})。第一个if返回调用递归的结果,第二个lambda lambda返回调用递归结果的元素,无论是调用递归的方式。 cons只是y的参数名称,它绑定到lambda的值。整个事情等同于此,事实上它应该是这样编写的,而不是当前的,过于复杂的形式:

(remove x (cdr ls))