類似my previous question,但現在我有一個轉折!容器內列表的總和?
我的數據類型是這樣的:
data Container = Container [Double]
,我想總結了這些嬰兒的列表,像這樣:
sum' [Container [1,1,1], Container [2,2,2], Container [3,3,3]]
> [6,6,6]
想不通這樣做的清潔方法。
類似my previous question,但現在我有一個轉折!容器內列表的總和?
我的數據類型是這樣的:
data Container = Container [Double]
,我想總結了這些嬰兒的列表,像這樣:
sum' [Container [1,1,1], Container [2,2,2], Container [3,3,3]]
> [6,6,6]
想不通這樣做的清潔方法。
做會總結之前到列表地圖最簡單的事情:
sum' = map (sum . (\ (Container ls) -> ls))
如果您想獲得不同的總和,您可以將sum
函數用別的東西。
它類似於您收到您的其他問題的答案,但你必須拿出自己的Container
S的你內心的名單:
import Data.List
sum' = map sum . transpose . map (\ (Container cs) -> cs)
嗯,我想我將其添加到答案你已經有了:一種傳統的做法是將記錄類型定義優先於所使用的簡單產品類型定義,因爲記錄類型爲您提供免費的存取器功能。所以,你會定義Container
這樣的:
data Container = Container { getContents :: Double }
這Container
定義爲一個字段的記錄類型,稱爲getContents
。這對於比其他類型的字段一個有趣的名字,但問題是,現在getContents
已被定義爲從提取該領域的功能Container
:
getContents (Container [1, 2, 3]) -- result: [1.0, 2.0, 3.0]
鑑於這種情況,你有相同的答案格熱戈日給人,但在他的地方明確定義content
功能的隱式定義getContents
功能:
sum' = map sum . transpose . map getContents
你的意思'[6,6,6]'? – Nate 2012-03-02 19:14:18
@Nate D'oh,謝謝! – drozzy 2012-03-02 19:15:28