作者:asgvbsd | 来源:互联网 | 2022-12-02 18:43
我是哈斯克尔的一个新的自我瘦身者.首先,我想编写一个函数来检查两个元组列表是否相等.每个元组都有一个键和值
其次,我想要一个函数来联合两个元组列表
我尝试了几种方法并尝试了很多次,但似乎无法满足我的要求.谁能帮助我?提前致谢.
1> ƛƛƛ..:
由于a
只是其中的一员Eq
,因此排序或分组不是一种选择.
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