集合体と集合の共通部分を実装する標準プレリュード関数はありますか?Haskell 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'のような隠れた表現を持つデータ構造は、どんな種類の効率を持ちながらも実際に得ることができるように一般的です。他のほとんどのものは、非常に非効率的であるか、または格納できるものがより限定されているかのいずれかです。 –