有人可以解释一下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)
答案 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
,例如let
,let*
等。请查看these posts以进一步说明