Posición del primer falso en un vector
Excercitium
Definir la función
tal que (posicion v) es la menor posición del vector de booleanos v cuyo valor es falso y es Nothing si todos los valores son verdaderos. Por ejemplo,
Definir la función
1 |
posicion :: Array Int Bool -> Maybe Int |
tal que (posicion v) es la menor posición del vector de booleanos v cuyo valor es falso y es Nothing si todos los valores son verdaderos. Por ejemplo,
1 2 3 |
posicion (listArray (0,4) [True,True,False,True,False]) == Just 2 posicion (listArray (0,4) [i <= 2 | i <- [0..4]]) == Just 3 posicion (listArray (0,4) [i <= 7 | i <- [0..4]]) == Nothing |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import Data.Array -- 1ª definición: posicion :: Array Int Bool -> Maybe Int posicion v | p > n = Nothing | otherwise = Just p where p = (length . takeWhile id . elems) v (_,n) = bounds v -- 2ª posición: posicion2 :: Array Int Bool -> Maybe Int posicion2 v | null xs = Nothing | otherwise = Just (head xs) where xs = [i | i <- indices v, v!i] |