Unión e intersección general de conjuntos.
Definir las funciones
unionGeneral :: Eq a => [[a]] -> [a] interseccionGeneral :: Eq a => [[a]] -> [a]
tales que + (unionGeneral xs) es la unión de los conjuntos de la lista de conjuntos xs (es decir, el conjunto de los elementos que pertenecen a alguno de los elementos de xs). Por ejemplo,
unionGeneral [] == [] unionGeneral [[1]] == [1] unionGeneral [[1],[1,2],[2,3]] == [1,2,3] unionGeneral ([[x] | x <- [1..9]]) == [1,2,3,4,5,6,7,8,9]
- (interseccionGeneral xs) es la intersección de los conjuntos de la lista de conjuntos xs (es decir, el conjunto de los elementos que pertenecen a todos los elementos de xs). Por ejemplo,
interseccionGeneral [[1]] == [1] interseccionGeneral [[2],[1,2],[2,3]] == [2] interseccionGeneral [[2,7,5],[1,5,2],[5,2,3]] == [2,5] interseccionGeneral ([[x] | x <- [1..9]]) == []
Soluciones
import Data.List (union, intersect) -- 1ª definición de unionGeneral unionGeneral :: Eq a => [[a]] -> [a] unionGeneral [] = [] unionGeneral (x:xs) = x `union` unionGeneral xs -- 2ª definición de unionGeneral unionGeneral2 :: Eq a => [[a]] -> [a] unionGeneral2 = foldr union [] -- 1ª definición de interseccionGeneral interseccionGeneral :: Eq a => [[a]] -> [a] interseccionGeneral [x] = x interseccionGeneral (x:xs) = x `intersect` interseccionGeneral xs -- 2ª definición de interseccionGeneral interseccionGeneral2 :: Eq a => [[a]] -> [a] interseccionGeneral2 = foldr1 intersect