Có trong các hàm chuẩn Prelude thực hiện công đoàn và giao điểm của các bộ không?là có liên minh và giao cắt Haskell Prelude thực hiện?
union :: (Eq a) => [a] -> [a] -> [a]
intersect :: (Eq a) => [a] -> [a] -> [a]
Nếu không, có thể ai đó có thể cho biết nếu thực hiện của tôi là hiệu quả, (tận dụng tốt các sự lười biếng và chức năng khúc dạo đầu)
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]
Và lưu ý rằng ràng buộc 'Ord' và cấu trúc dữ liệu có biểu diễn ẩn như' Set' là chung chung như bạn thực sự có được khi có bất kỳ loại hiệu quả hợp lý nào. Hầu như bất cứ điều gì khác hoặc là sẽ rất không hiệu quả hoặc hạn chế hơn trong những gì nó có thể lưu trữ. –