Ir al contenido principal

Eliminación de n elementos

Definir la función

elimina :: Int -> [a] -> [[a]]

tal que (elimina n xs) es la lista de las listas obtenidas eliminando n elementos de xs. Por ejemplo,

elimina 0 "abcd"  ==  ["abcd"]
elimina 1 "abcd"  ==  ["abc","abd","acd","bcd"]
elimina 2 "abcd"  ==  ["ab","ac","ad","bc","bd","cd"]
elimina 3 "abcd"  ==  ["a","b","c","d"]
elimina 4 "abcd"  ==  [""]
elimina 5 "abcd"  ==  []
elimina 6 "abcd"  ==  []

Soluciones

-- 1ª solución:
elimina1 :: Int -> [a] -> [[a]]
elimina1 0 xs     = [xs]
elimina1 n []     = []
elimina1 n (x:xs) = [x:ys | ys <- elimina1 n xs] ++ elimina1 (n-1) xs

-- 2ª solución:
elimina2 :: Int -> [a] -> [[a]]
elimina2 n xs = [ys | ys <- subsequences xs, length ys == k]
    where k = length xs - n