2011-05-22 42 views
0

如何總結月份= 5和年份= 2010的價格?我有數據的日期主題和價格數據銷售,它們通過id連接。這是我的代碼:東西像數據庫,但不是數據庫和總和價格

-- subject id, date 
data Subject = Subject Int CalendarTime deriving (Read, Show) 

-- sell id, subject id, price 
data Sell = Sell Int Int Double deriving (Read, Show) 
+0

主題和銷售結構的商店如何?每個主題都是列表中的元素嗎?數據庫(SQL或其他)?只是一個列表? – 2011-05-22 18:35:39

+0

你到目前爲止有什麼?從這個問題無法告訴你想要做什麼。 – 2011-05-22 18:36:25

+0

嗚。哈斯克爾。花式...... :) – 2011-05-22 18:40:51

回答

2

現實世界中的應用應該使用一個數據庫或至少一個映射(從容器或無序的容器包裝),但可以使用簡單的列表理解可以得到一個簡單的解決方案。

假設你有一個主題簡單列表和賣:

type Subjects = [Subject] 
type Sells = [Sell] 

你可以做一個O(N * M)實現(適合玩而已!):

price :: Sell -> Double 
price (Sell _ _ d) = d 

calTime :: Subject -> CalendarTime 
calTime (Subject _ c) = c 

sIdent :: Subject -> Int -- Omitted, you should use record syntax anyway 
eIdent :: Sell -> Int -- Omitted 

sumPred :: (CalendarTime -> Bool) -> Subjects -> Sells -> Double 
sumPred js es = sum [price e | j <- js, e <- es 
        , sIdent j == eIdent e 
        , pred (calTime j)] 

但正如我說,那很愚蠢。使用帶有由CalendarTime和Sell的身份標識鍵控制的主題的數據庫將爲您提供更實用的解決方案。

+0

呃....難以理解。 – newuser 2011-05-22 18:50:15

+3

呃...對於我來說無助於你的理解。 – 2011-05-22 18:59:29

相關問題