Excercitium
Definir la función
posicion :: Array Int Bool -> Maybe Int |
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,
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 |
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
Soluciones
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] |
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]
Se puede imprimir o compartir con
recorriendo los indices:
Usando assocs:
O usando la instancia de aplicativo de Maybe:
la instancia de functor no de aplicativo