我不理解Scheme中的lambda

时间:2013-10-27 19:56:15

标签: scheme lambda

有人可以解释一下lambda在计划中的运作方式吗?例如它如何在这里工作:

(define (prepend-every prefix sent)
  (every (lambda (wd) (word prefix wd)) sent))

或者在这里:

(define (first-last sent)
  (keep (lambda (wd) (equal? (first wd) (last wd))) sent))

> (first-last '(california ohio nebraska alabama alaska massachusetts))
'(OHIO ALABAMA ALASKA)

1 个答案:

答案 0 :(得分:4)

特殊形式lambda是一个匿名过程,在所示的示例中,它是避免定义单独的一次性函数的简写。例如,第一个代码段相当于:

(define (helper wd)
  (word prefix wd))

(define (prepend-every prefix sent)
  (every helper sent))

但为什么要定义一个仅使用一次的新程序?这就是我们在这种情况下使用lambda的原因。此外,记住这样写的函数定义是很好的:

(define (f x)
  <body>)

...只是这种等效形式的较短语法:

(define f
  (lambda (x)
    <body>))

所以你看,最后Scheme中的所有程序都是lambda。还有其他特殊形式可以转换为lambda,例如letlet*等。请查看these posts以进一步说明