Sustitución de listas
Definir la función
1 |
sustituye :: Eq a => [a] -> [a] -> [a] -> [a] |
tal que (sustituye xs ys zs) es la lista obtenida sustituyendo las ocurrencias de la lista no vacía xs en zs por ys. Por ejemplo,
1 2 3 4 |
sustituye "as" "_" "las casaderas" == "l_ c_ader_" sustituye "as" "es" "las casaderas" == "les cesaderes" sustituye "asa" "a" "las casaderas" == "las caderas" sustituye "asd" "a" "las casaderas" == "las casaderas" |
Soluciones
1 2 3 4 5 6 7 8 |
import Data.List (isPrefixOf) sustituye :: Eq a => [a] -> [a] -> [a] -> [a] sustituye xs ys [] = [] sustituye xs ys (z:zs) | isPrefixOf xs (z:zs) = ys ++ sustituye xs ys (drop n zs) | otherwise = z : sustituye xs ys zs where n = length xs - 1 |
Recursion simple:
Un fold estricto bastante feo:
Con Data.List.Split todo es mucho mas facil: