Enunciado
-- Definir la función
-- seleccionConFallo :: (a -> Bool) -> [a] -> [a]
-- tal que (seleccionConFallo p xs) es la lista de los elementos de xs
-- que cumplen el predicado p hasta el primero que no lo cumple
-- inclusive. Por ejemplo,
-- seleccionConFallo (<5) [3,2,5,7,1,0] == [3,2,5]
-- seleccionConFallo odd [1..4] == [1,2]
-- seleccionConFallo odd [1,3,5] == [1,3,5]
-- seleccionConFallo (<5) [10..20] == [10] |
-- Definir la función
-- seleccionConFallo :: (a -> Bool) -> [a] -> [a]
-- tal que (seleccionConFallo p xs) es la lista de los elementos de xs
-- que cumplen el predicado p hasta el primero que no lo cumple
-- inclusive. Por ejemplo,
-- seleccionConFallo (<5) [3,2,5,7,1,0] == [3,2,5]
-- seleccionConFallo odd [1..4] == [1,2]
-- seleccionConFallo odd [1,3,5] == [1,3,5]
-- seleccionConFallo (<5) [10..20] == [10]
Soluciones
-- 1ª solución (por recursión):
seleccionConFallo1 :: (a -> Bool) -> [a] -> [a]
seleccionConFallo1 p [] = []
seleccionConFallo1 p (x:xs) | p x = x : seleccionConFallo1 p xs
| otherwise = [x]
-- 2ª solución (con span):
seleccionConFallo2 :: (a -> Bool) -> [a] -> [a]
seleccionConFallo2 p xs = ys ++ take 1 zs
where (ys,zs) = span p xs |
-- 1ª solución (por recursión):
seleccionConFallo1 :: (a -> Bool) -> [a] -> [a]
seleccionConFallo1 p [] = []
seleccionConFallo1 p (x:xs) | p x = x : seleccionConFallo1 p xs
| otherwise = [x]
-- 2ª solución (con span):
seleccionConFallo2 :: (a -> Bool) -> [a] -> [a]
seleccionConFallo2 p xs = ys ++ take 1 zs
where (ys,zs) = span p xs
Referencia
El ejercicio está basado en el problema del 29 de abril de 1HaskellADay.
Se puede imprimir o compartir con
7 soluciones de “Selección hasta el primero que falla inclusive”