-2

有人可以解释一下 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)
4

1 回答 1

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在后台。还有其他特殊形式可以转换为lambdas,例如let,let*等。请查看这些 帖子以获得进一步说明。

于 2013-10-27T20:04:35.410 回答