유니온과 세트의 교차를 구현하는 표준 Prelude 함수가 있습니까?거기에 하스켈 Prelude 구현을 결합하고 교차합니까?
union :: (Eq a) => [a] -> [a] -> [a]
intersect :: (Eq a) => [a] -> [a] -> [a]
이없는 경우, 내 구현 (게으름과 서곡 기능을 잘 활용) 목록에 union
및 intersect
기능은 표준 라이브러리에 있습니다
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 '과 같은 숨겨진 표현이있는 데이터 구조는 합리적인 효율성을 가지면서 실제로 얻을 수있는 일반적인 것입니다. 거의 모든 것이 매우 비효율적이거나 저장하기에 더 제한적입니다. –