¿Hay en las funciones Preludio estándar que implementan la unión y la intersección de conjuntos?¿hay una unión e intersección con la implementación de Haskell Prelude?
union :: (Eq a) => [a] -> [a] -> [a]
intersect :: (Eq a) => [a] -> [a] -> [a]
Si no, puede que alguien puede decir si mi aplicación es eficiente, (hacer un buen uso de la pereza y la función preludio)
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]
Y tenga en cuenta que una restricción 'Ord' y una estructura de datos con una representación oculta como' Set' es tan genérica como puede obtener realmente mientras tiene algún tipo de eficiencia sensible. Casi cualquier otra cosa va a ser muy ineficiente o más limitada en lo que puede almacenar. –