【发布时间】:2016-03-10 02:40:20
【问题描述】:
我正在尝试创建可以在不使用 Multiset 模块的情况下在 Haskell 中找到两个多集的并集和交集的函数。我对普通列表中的基本交集和联合有很好的理解,但多集似乎让我很困惑。到目前为止,我拥有的 intersect 函数:
setUnique :: (Eq a) => [a] -> [a]
setUnique [] = []
setUnique (x:xs)
| elem x xs = setUnique xs
| otherwise = x : setUnique xs
setIntersect' :: (Eq a) => [a] -> [a]
setIntersect' xs ys = setUnique (xs ++ ys)
我在上面的代码中遇到的问题是我实际上得到了不属于相交部分的值。例如 [1,2,2,3,3,3] [1,2,2] = [3,1,2]
【问题讨论】:
-
[1,1,2,2]与其自身的交集将再次成为[1,1,2,2]。我不认为setUnique在计算交集或一般多集计算中非常有用。 -
setIntersect'只是将两个多重集的并集减少为其基础集。
标签: haskell union intersect multiset