0

我开始了解lambda. 有没有办法可以使用foldrfoldl使用lambda?有人可以给我一个简单的例子吗?谢谢

4

2 回答 2

4

要添加 3 和 4 的平方,例如:

(foldl 
  (lambda (val res) (+ (sqr val) res)) 
  0 
  '(3 4))

初始值为 0。对于列表 '(3 4) 的每个值,调用函数时将值绑定到val,并将之前的结果绑定到res

这相当于

(define (fun val res)
  (+ (sqr val) res))

(foldl fun 0 '(3 4))

除了在第一个示例中,该函数是匿名的。

于 2013-11-02T16:44:37.597 回答
0

您基本上可以将 lambda 与许多东西结合使用,包括 foldl 和 foldr、过滤器、地图等(当然取决于您想要实现的目标)。我们将在本例中使用 foldr。

假设我们要计算此列表中所有数字的总和:

(define list1 '(1 2 3))

使用 foldr 和 lambda 的语法是:

(foldr (lambda (x y) (+ x y)) 0 list1)

借此:

  • (lambda (xy) (+ xy))是我们的函数(接受两个参数 x 和 y 并将它们相加)
  • 0是基数(意思是我们从零开始,然后加上 x 和 y)
  • list1是我们正在处理的列表的名称

基本上我们所做的是(+ 1 (+ 2 (+ 3 0)))数学上

最后但并非最不重要的一点是,包括 lambda 在内的整个 foldr 函数可以缩短为

(foldr + 0 list1)

它几乎会做同样的事情。

这是另一个例子,试着自己弄清楚它是做什么来测试你对这个概念的理解的。

(foldr (lambda (x y) (append (list (add1 x)) y)) '() list1)
于 2017-09-25T13:48:46.623 回答