我开始了解lambda
. 有没有办法可以使用foldr
或foldl
使用lambda
?有人可以给我一个简单的例子吗?谢谢
问问题
4263 次
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 回答