Scheme 程序中的Lambda
有人能解释一下下面代码中的两个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
(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)))))))