0
の長さと比較し、私は次のリストがあります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
が2回現れるので!
編集:
データ型:
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
は私が探していた答えを見つけました。
私が正しく理解すれば、 'articles'の長さをとり、指定されたリストで頻繁に発生するすべての" article "を放出しますか? –
はい、正しいです。実際には、問題は、記事のリストがあれば、そのすべてを持つMagasin(ショップ)を見つけることです。私のコードは記事のリストにある1つの本のために働いています。 'disponible [" HP7 "] [(E Proxis" HP7 "20)、(E Libri" HP7 "50)、(E Amazon" Haskell "45)、 Proxis "Haskell" 45)] ' は '((Libri、50.0)、(Proxis、20.0)] 'を発行します。 しかし、私はより1品含むList与える場合: 'disponible [ "HP7を"、 "ハスケル"] [(E Proxis "HP7" 20)、(E liberの複数形 "HP7" 50)、(Eアマゾン "ハスケル" 45)、(E Proxis "ハスケル" 45)] ' が発する' [(liberの複数形、50.0)、(Proxis、20.0)、(Proxis、45.0)、(アマゾン、45.0)] '。 –
それで、それはどちらかを持っている店を出すのであって、両方を持っている店ではない:/ –