我想你在找foldr. foldr是fold-right的球拍实现.
从文档:
例如
map,foldl将过程应用于一个或多个列表的元素.然而,map将返回值组合到列表中,foldl将由proc确定的任意方式组合返回值.
[...]
[
foldr是]喜欢foldl,但列表是从右到左遍历的.不同的是foldl,foldr处理空间中的lsts 与lsts的长度成比例(加上每次调用proc的空间).
编辑:
您可能还想使用Chris建议的srfi/1库,特别是如果您希望fold-right像srfi/1推荐一样工作.有一些微妙的差异:
#lang racket
(require srfi/1)
(foldr list* '() '(a b c) '(1 2 3))
(fold-right list* '() '(a b c) '(1 2 3 4))
(foldr list* '() '(a b c) '(1 2 3 4))
Run Code Online (Sandbox Code Playgroud)
输出:
Welcome to DrRacket, version 5.3 [3m].
Language: racket; memory limit: 128 MB.
'{a 1 b 2 c 3}
'{a 1 b 2 c 3}
[ERROR] foldr: given list does not have the same size as the first list: '{1 2 3 4}
Run Code Online (Sandbox Code Playgroud)
注意:fold-right不同大小列表上没有错误,但您仍然只能从第二个列表中获取1,2,3个原子.这符合srfi/1规范:
当最短列表用完值时,折叠操作终止
foldr 做错了.
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |