簡體   English   中英

Haskell列表-計算元組的fst並與列表長度進行比較

[英]Haskell Lists - Count fst of tuples and compare with length of list

我有以下清單:

[(Libri,50.0),(Proxis,20.0),(Proxis,45.0),(Amazon,45.0)]

而且我有一個稱為“ articles列表。 我想用元組轉換上面的列表,這樣,如果我使(元篇文章)乘以元組的第一個元素出現在列表中,就只能得到它!

因此,例如,如果我有一個列表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)

有任何想法嗎?

編輯:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM