how to use foldr and lambda in scheme?
我开始学习
要添加3和4的平方,例如:
1 2 3 4 | (foldl (lambda (val res) (+ (sqr val) res)) 0 '(3 4)) |
初始值为0。对于列表\\'(3 4)的每个值,将调用函数并将其值绑定到
这等效于
1 2 3 4 | (define (fun val res) (+ (sqr val) res)) (foldl fun 0 '(3 4)) |
除了在第一个示例中,该函数是匿名的。
您基本上可以将lambda与很多东西结合使用,包括foldl和foldr,过滤器,地图等(当然取决于您要实现的目标)。在此示例中,我们将使用文件夹。
假设我们要计算此列表中所有数字的总和:
1 | (define list1 '(1 2 3)) |
使用foldr和lambda的语法为:
1 | (foldr (lambda (x y) (+ x y)) 0 list1) |
其中:
-
(lambda(x y)(x y))是我们的函数
(采用两个参数x和y并将它们相加) - 0是基数(意味着我们从零开始,然后加上x和y)
- list1是我们正在处理的列表的名称
基本上我们所做的是数学上的(1(2(3 0)))
最后但并非最不重要的是,包括lambda在内的整个文件夹功能都可以缩短为
1 | (foldr + 0 list1) |
它几乎会做同样的事情。
这里是另一个示例,请尝试自己弄清楚如何测试您对该概念的理解。
1 | (foldr (lambda (x y) (append (list (add1 x)) y)) '() list1) |