#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. эх… для того, чтобы я не уточнил, чтобы помочь вам понять.