list - haskell 如何检查两个元组列表是否相等并取联合

标签 list tuples

我是 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/

相关文章:

list - Groovy:比较列表忽略其中元素的顺序

java - 如何过滤字符串/列表?

Python乘法序列技巧

python - 将纬度/经度字符串转换为元组

Python:将 Edgelist 从 NetworkX 转换为数据帧

list - Haskell 列表到元组

list - XSL-FO-如何在两个列表 block 中继续编号?

Python 语法/列表切片问题 : What does this syntax mean?

c# - 使用 bool 值的多个 orderby linq 查询

python - 将列表项转换为元组