List Haskell列表-计算元组的fst并与列表的长度进行比较

List Haskell列表-计算元组的fst并与列表的长度进行比较,list,haskell,List,Haskell,我有以下清单: [(Libri,50.0),(Proxis,20.0),(Proxis,45.0),(Amazon,45.0)] 我有一个叫做文章的列表。 我想用元组转换上面的列表,这样,如果我有(长度文章)乘以列表中显示的元组的第一个元素,就只能得到它 因此,例如,如果我有一个列表articles=[“HP”,“Haskell”],该列表应该显示: [(Proxis,20.0),(Proxis,45.0)] 因为Proxis显示了两次 编辑: 数据类型: data Magasin = Pr

我有以下清单:

[(Libri,50.0),(Proxis,20.0),(Proxis,45.0),(Amazon,45.0)]
我有一个叫做
文章的列表。
我想用元组转换上面的列表,这样,如果我有(长度文章)乘以列表中显示的元组的第一个元素,就只能得到它

因此,例如,如果我有一个列表
articles=[“HP”,“Haskell”]
,该列表应该显示:

[(Proxis,20.0),(Proxis,45.0)]
因为
Proxis
显示了两次

编辑:

数据类型:

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)
有什么想法吗

编辑:


找到了我想要的答案。

因此,如果我理解正确,您可以计算
文章的长度
并发出给定列表中经常出现的每个“文章”?是的,这是正确的。事实上,问题是要找到一个物品清单,上面有所有物品的Magasin(商店)。我的代码适用于文章列表中的一本书:
disposible[“HP7”][(E-Proxis“HP7”20),(E-Libri“HP7”50),(E-Amazon“Haskell”45),(E-Proxis“Haskell”45)]
emits
[(Libri,50.0),(Proxis,20.0)]
。但如果我给出一个包含不止一篇文章的列表:
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),
。因此,它发出的商店要么有一家,要么有另一家,不是同时拥有这两个功能的商店:/n如果列表中有多篇文章出现两次怎么办?请将您的答案作为答案,而不是对问题的编辑。
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
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