【发布时间】:2012-09-09 00:48:49
【问题描述】:
Data.Array 不提供 Array 类型的折叠。
在 Real World Haskell(第 12 章)中,据说原因是 Arrays 可以根据程序员的需要以不同的方式折叠:
首先,有几种折叠是有意义的。我们可能仍然想要折叠单个元素,但我们现在也可以折叠行或列。最重要的是,对于一次元素的折叠,不再只有两个序列用于遍历。
Lists 不正是这样吗?表示例如是很常见的。具有多维 List 的矩阵,但仍然为一维 Lists 定义了折叠。
我缺少什么微妙之处?是不是多维的Array 与Arrays 的Array 有很大的不同?
编辑:嗯,即使是多维数组也确实定义了折叠,以Data.Foldable的实例的形式。[0]那么,这与 Real World Haskell 的引用有什么关系呢?
[0]http://hackage.haskell.org/packages/archive/base/4.6.0.0/doc/html/Data-Foldable.html
【问题讨论】:
-
多维数组和嵌套列表的区别在于所有数组的类型基本相同:
Array Int e、Array (Int,Int) e、Array (Int,Int,Int) e...。所以你不能创建一个只为一维数组定义的函数,而foldr接受一个列表列表并逐个列表处理它,而不是连接所有列表并逐个元素处理它。
标签: higher-order-functions haskell