что-то вроде базы данных, но не базы данных и суммарной цены

#haskell

#haskell

Вопрос:

Как я могу суммировать цены, где месяц = 5 и год = 2010? У меня есть дата в теме данных и цены в продаже данных, они связаны идентификатором. Это мой код:

 -- 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. Как складируются структуры Subject и Sell? Является ли каждый объект элементом в списке? База данных (sql или другая)? Просто список?

2. Что у вас есть на данный момент? Из этого вопроса невозможно определить, что вы пытаетесь сделать.

Ответ №1:

В реальном мире, вероятно, следует использовать базу данных или, по крайней мере, сопоставление (из контейнеров или пакетов с неупорядоченными контейнерами), но простое решение может быть получено с помощью простого понимания списка.

Предполагая, что у вас есть простые списки Subject и Sell:

 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, и объектами продажи, привязанными к identity, даст вам более практичное решение.

Комментарии:

1. эх… для того, чтобы я не уточнил, чтобы помочь вам понять.