Elementos no repetidos
Definir la función
1 |
noRepetidos :: Eq a => [a] -> [a] |
tal que (noRepetidos xs) es la lista de los elementos no repetidos de la lista xs. Por ejemplo,
1 2 3 |
noRepetidos [3,2,5,2,4,7,3] == [5,4,7] noRepetidos "noRepetidos" == "nRptids" noRepetidos "Roma" == "Roma" |
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 |
import Test.QuickCheck -- 1ª solución -- =========== noRepetidos :: Eq a => [a] -> [a] noRepetidos xs = [x | x <- xs, ocurrencias x xs == 1] -- (ocurrencias x ys) es el número de ocurrencias de x en ys. Por -- ejemplo, -- ocurrencias 3 [3,2,5,2,4,7,3] == 2 -- ocurrencias 5 [3,2,5,2,4,7,3] == 1 ocurrencias :: Eq a => a -> [a] -> Int ocurrencias x ys = length [y | y <- ys, y == x] -- 2ª solución -- =========== noRepetidos2 :: Eq a => [a] -> [a] noRepetidos2 [] = [] noRepetidos2 (x:xs) | elem x xs = noRepetidos2 [y | y <- xs, y /= x] | otherwise = x : noRepetidos2 xs -- Equivalencia -- ============ -- La propiedad de equivalencia es prop_equivalencia :: [Int] -> Bool prop_equivalencia xs = noRepetidos xs == noRepetidos2 xs -- La comprobación es -- ghci> quickCheck prop_equivalencia -- +++ OK, passed 100 tests. |
Pensamiento
Y en perfecto rimo
— así a la vera del agua
el doble chopo del río.Antonio Machado
Falla para los elementos que aparecen más de dos veces. Por ejemplo,
Falla en el primer ejemplo
pero el 2 y el 3 están repetidos.
En Python