У меня есть следующий список:Haskell списки - граф FST кортежей и сравнить с длиной списка
[(Libri,50.0),(Proxis,20.0),(Proxis,45.0),(Amazon,45.0)]
И у меня есть определенный список под названием articles
. Я хочу преобразовать список выше, с кортежами, чтобы, если у меня есть (статьи длины), то первый элемент кортежа, появляющийся в списке, получает только это!
Так, например, если у меня есть список articles=["HP","Haskell"]
, список должен показать:
[(Proxis,20.0),(Proxis,45.0)]
Proxis
Потому что показывает два раза!
Edit: Типы
данных:
data Magasin = Proxis | Amazon | Libri deriving (Eq, Show)
type Article = String
type Prix = Float
data Entree = E Magasin Article Prix deriving (Eq, Show)
type Stock = [Entree]
Это мой текущий код:
disponible::[Article]->Stock->[(Magasin,Float)]
disponible [] stk = []
disponible (art:reste) stk = (foldl(\acc (E m a p)->if a==art then (m,p):acc else acc) [] stk)++(disponible reste stk)
Любые идеи?
Edit:
disponible::[Article]->Stock->[(Magasin,Float)]
disponible articles stock = map(\(m,ls)->(m,sum $ map (\(E _ _ p)->p) ls)) $ filter ((==length articles).length.snd) magasinsArticles
where contientArticles = (filter (\(E _ a _)->a`elem`articles) stock)
magasins = foldl (\acc e-> if e`elem`acc then acc else (e:acc)) [] $ map (\(E m _ _)->m) contientArticles
magasinsArticles = map (\m->(m,filter(\(E m2 _ _)->m2==m) contientArticles)) magasins
Найден ответ, который я искал.
Итак, если я правильно понимаю, вы берете длину «статей» и выделяете каждую «статью», которая часто встречается в данном списке? –
Да, это правильно. Собственно, вопрос состоит в том, чтобы найти, учитывая список статей, Magasin (магазин), в котором есть все. Мой код работает для одной книги в списке статей: 'disponible [" HP7 "] [(E Proxis" HP7 "20), (E Libri" HP7 "50), (E Amazon" Haskell "45), (E Proxis «Haskell» 45)] ' испускает ' [(Libri, 50.0), (Proxis, 20.0)] '. Но если я даю Список, содержащий более 1 статьи: 'disponible [" HP7 "," Haskell "] [(E Proxis" HP7 "20), (E Libri" HP7 "50), (E Amazon" Haskell " 45), (E Proxis «Haskell» 45)] ' испускает ' [(Libri, 50,0), (Proxis, 20,0), (Proxis, 45,0), (Amazon, 45,0)] '. –
Итак, он испускает магазины, у которых есть либо один, либо другой, а не магазин, который имеет оба:/ –