Entrada y Salida en Haskell
Puedes leer este capítulo [capítulo] del
[tutorial de Haskell] como introducción a las
operaciones de entrada y salida en Haskell.
Ejercicios
-
Define una función
putString :: String -> IO ()
usando [putChar ]
. Da una definición
usando (>>=), y otra usando la notación do . (Esta función está predefinida como
[putStr ]
.
-
Escribe un programa que pida un número del
teclado y muestre su factorial.
-
Define una función runIO_ ::
[IO ()] -> IO ()
que tome una lista de acciones y las ejecute secuencialmente.
Por ejemplo, runIO_ [ putStr
"hola", putStr "mundo" ] muestra
por pantalla la cadena "holamundo". (Esta función está predefinida como
[sequence_ ]
).
-
Define una función runIO ::
[IO a] -> IO [a] que tome una lista de acciones y las ejecute secuencialmente,
devolviendo en una lista los resultados de cada una.
Por ejemplo,
Main> do {xs <- runIO [return 24, readLn]; print xs}
4
[24,4]
(Esta función está predefinida como
[sequence ]
).
-
Define la función putString
usando
[map ]
y
[sequence_ ]
.
-
La función
[mapM_ ]
está predefinida
del siguiente modo:
mapM_ :: (a -> IO b) -> [a] -> IO ()
mapM_ f = sequence_ . map f
Define la función putString usando mapM_ .
-
Define una función forIO ::
[a] -> (a -> IO ()) -> IO () que simule un
bucle for de un lenguaje imperativo. Por ejemplo, el programa
prog2 :: IO ()
prog2 = forIO [1..5] acc
where
acc i = do { putStr ("El factorial de "
; putStr (show i)
; putStr " es "
; putStrLn (show (fact i))
}
fact 0 = 1
fact m@(n+1) = m*fact n
produce la siguiente salida:
El factorial de 1 es 1
El factorial de 2 es 2
El factorial de 3 es 6
El factorial de 4 es 24
El factorial de 5 es 120
-
Define una función when ::
Bool -> IO () -> IO ()
que ejecute una acción solo si una condición es verdadera.Por
ejemplo,
prog3 :: IO ()
prog3 = do { putStr "Dame un número: "
; n <- readLn
; when (n>=0) (putStr "Es positivo")
; when (n<0) (putStr "Es negativo")
}
(Esta función está definida en la
biblioteca
[Monad ]
).
-
Escribe un programa que lea un fichero de
texto que contiene palabras (una por línea) y genere un nuevo
fichero con las palabras ordenadas (también una por línea).
Puedes usar las funciones predefinidas
[lines ]
y
[unlines ]
.
|