【问题标题】:Haskell Multiset OperationsHaskell 多集操作
【发布时间】: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


【解决方案1】:

你得到了所有的价值,因为

xs ++ ys

包含所有元素 ([1,2,2,3,3,3] ++ [1,2,2] = [1,2,2,3,3,3,1,2,2])

而 setUnique 只是删除了额外的东西

setUnique [1,2,2,3,3,3,1,2,2] = [3,1,2]

我想你想在这里使用除 (++) 以外的东西(这是你想要的 Union,你需要为 intersect 写一些东西)。

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多