我是 Haskell 的新自学者。首先,我想编写一个函数来检查两个元组列表是否相等。每个元组都有一个键和值
其次,我想要一个函数来联合两个元组列表
我尝试了几种方法并尝试了很多次但似乎无法满足我的要求。有人可以帮助我吗?提前致谢。
最佳答案
自 a
只是 Eq
的成员(member),排序或分组不是一种选择。
import Data.List(nub, (\\))
import Data.Monoid(getSum)
type Times = Int
type Lis a = [(a,Times)]
lisEqual :: Eq a => Lis a -> Lis a -> Bool
lisEqual xs xs' = length xs == length xs' && xs \\ xs' == []
lisSum :: Eq a => Lis a-> Lis a-> Lis a
lisSum xs xs' = fmap f $ getKeys l
where
f x = (,) x (getSum . foldMap (pure . snd) . filter ((x ==) . fst) $ l)
l = xs ++ xs'
getKeys = nub . fst . unzip
关于list - haskell 如何检查两个元组列表是否相等并取联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52703945/