Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 是否有union和intersect Haskell Prelude实施?_Data Structures_Haskell_Set - Fatal编程技术网

Data structures 是否有union和intersect Haskell Prelude实施?

Data structures 是否有union和intersect Haskell Prelude实施?,data-structures,haskell,set,Data Structures,Haskell,Set,标准前奏曲函数中是否有实现集合并集和交集的函数 union :: (Eq a) => [a] -> [a] -> [a] intersect :: (Eq a) => [a] -> [a] -> [a] 如果没有,可能有人会说,如果我的执行是有效的,(充分利用懒惰和前奏功能) unionSet::(等式a)=>[a]->[a]->[a] unionSet as bs=foldl(\xs y->如果元素y xs,则xs else xs++[y])作

标准前奏曲函数中是否有实现集合并集和交集的函数

union      :: (Eq a) => [a] -> [a] -> [a]
intersect  :: (Eq a) => [a] -> [a] -> [a]
如果没有,可能有人会说,如果我的执行是有效的,(充分利用懒惰和前奏功能)

unionSet::(等式a)=>[a]->[a]->[a]
unionSet as bs=foldl(\xs y->如果元素y xs,则xs else xs++[y])作为bs
相交集::(等式a)=>[a]->[a]->[a]->[a]
intersectSet as bs=let ns=[a | a标准库中的列表中有和函数,位于
Data.List
中,但不在
Prelude
本身中

就效率而言,我会说“不”对于以上所有内容,无论是您的还是标准库的。在一个只有
Eq
约束的列表上,都不可能进行有效的操作。也就是说,您仍然可以在
数据中找到实现。list
信息性——请参阅上面的链接,我已经直接指向了相关的源代码


编辑——为了子孙后代的利益,作为一个简短的附录,请务必查看Don的答案,了解您真正想要用于此目的的内容,而不是“这些功能是否存在”这一狭义问题

< P>基库提供了列表版本,如camccann指出的。如果您想得到更有效的东西,请考虑<强> <强> >,它提供:

union :: Ord a => Set a -> Set a -> Set a

intersection :: Ord a => Set a -> Set a -> Set a

复杂度为O(n+m)。

请注意,
Ord
约束和具有隐藏表示(如
Set
)的数据结构在具有任何一种合理效率的情况下都是通用的。几乎所有其他内容要么效率非常低,要么在存储内容上受到更大的限制。
union :: Ord a => Set a -> Set a -> Set a

intersection :: Ord a => Set a -> Set a -> Set a