像数据库但不是数据库和总和价格

时间:2011-05-22 18:28:34

标签: haskell

如何汇总月份= 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)

1 个答案:

答案 0 :(得分: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键入的主题数据库和按身份键入的销售数据将为您提供更实用的解决方案。