Reconocimiento de particiones
Una partición de un conjunto es una división del mismo en subconjuntos disjuntos no vacíos.
Definir la función
| 1 |    esParticion :: Eq a => [[a]] -> Bool | 
tal que (esParticion xss) se verifica si xss es una partición; es decir sus elementos son listas no vacías disjuntas. Por ejemplo.
| 1 2 3 4 |    esParticion [[1,3],[2],[9,5,7]]  ==  True    esParticion [[1,3],[2],[9,5,1]]  ==  False    esParticion [[1,3],[],[9,5,7]]   ==  False    esParticion [[2,3,2],[4]]        ==  True | 
Soluciones
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import Data.List ((\\), intersect) -- 1ª definición -- ============= esParticion :: Eq a => [[a]] -> Bool esParticion xss =   [] `notElem` xss &&   and [disjuntos xs ys | xs <- xss, ys <- xss \\ [xs]]  disjuntos :: Eq a => [a] -> [a] -> Bool disjuntos xs ys = null (xs `intersect` ys) -- 2ª definición -- ============= esParticion2 :: Eq a => [[a]] -> Bool esParticion2 []       = True esParticion2 (xs:xss) =   not (null xs) &&   and [disjuntos xs ys | ys <- xss] &&   esParticion2 xss -- 3ª definición -- ============= esParticion3 :: Eq a => [[a]] -> Bool esParticion3 []       = True esParticion3 (xs:xss) =   not (null xs) &&   all (disjuntos xs) xss &&   esParticion3 xss -- Equivalencia prop_equiv :: [[Int]] -> Bool prop_equiv xss =   and [esParticion xss == f xss | f <- [ esParticion2                                        , esParticion3]] -- Comprobación --    λ> quickCheck prop_equiv --    +++ OK, passed 100 tests. -- Comparación de eficiencia: --    λ> esParticion [[x] | x <- [1..3000]] --    True --    (4.37 secs, 3,527,956,400 bytes) --    λ> esParticion2 [[x] | x <- [1..3000]] --    True --    (1.26 secs, 1,045,792,552 bytes) --    λ> esParticion3 [[x] | x <- [1..3000]] --    True --    (1.30 secs, 1,045,795,272 bytes) --    λ> esParticion3 [[x] | x <- [1..3000]] --    True --    (1.30 secs, 1,045,795,272 bytes) | 
Pensamiento
Sentía los cuatro vientos,
en la encrucijada
de su pensamiento.Antonio Machado






