是否存在實現聯合和交集的Standard Prelude函數?是否存在聯合並且與Haskell Prelude實現相交?
union :: (Eq a) => [a] -> [a] -> [a]
intersect :: (Eq a) => [a] -> [a] -> [a]
如果沒有,可能有人會說,如果我的實現是有效率的,(利用好懶惰和前奏功能)
unionSet :: (Eq a) => [a] -> [a] -> [a]
unionSet as bs = foldl (\xs y -> if elem y xs then xs else xs ++ [y]) as bs
intersectSet :: (Eq a) => [a] -> [a] -> [a]
intersectSet as bs = let ns = [ a | a <- as, elem a bs] in [ b | b <- bs, elem b ns]
並注意一個'Ord'約束,並與像'Set'隱藏表示的數據結構是通用的,你可以真正得到同時具有任何形式的明智效率。幾乎其他任何事情要麼會非常低效,要麼會限制其存儲的內容。 –