Selección hasta el primero que falla inclusive
Enunciado
1 2 3 4 5 6 7 8 9 |
-- 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 2 3 4 5 6 7 8 9 10 |
-- 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.
7 Comentarios