Data.Array
不提供Array
類型的摺疊。 (第12章)爲什麼Haskell不能爲一維數組提供摺疊?
在真實世界哈斯克爾,原因據說是Array
小號可能以不同的方式根據程序員的需要進行摺疊:
首先,有幾種摺疊有意義。我們仍然可能想要摺疊單個元素,但是現在我們也可以摺疊行或列。除此之外,對於每次元素摺疊,不再只有兩個序列用於遍歷。
這與List
s不完全對應嗎?代表例如具有多維List
的矩陣,但仍存在爲一維List
s定義的摺疊。
我失蹤的微妙之處是什麼?是否多維Array
與Array
的Array
完全不同?
編輯:嗯,甚至多維數組確實有褶皺定義,在Data.Foldable
實例的形式,[0]那麼,如何適應,在與真實世界哈斯克爾報價?
[0] http://hackage.haskell.org/packages/archive/base/4.6.0.0/doc/html/Data-Foldable.html
多維數組與嵌套列表之間的區別在於,所有數組本質上都具有相同的類型:Array Array(Int,Int)e','Array(Int,Int,Int)e' ...。所以你不能創建一個只爲一維數組定義的函數,而'foldr'需要列表並按列表處理它,而不是連接所有列表並逐個處理它。 –