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