Entrada/salida en HASKELL - PowerPoint PPT Presentation

About This Presentation
Title:

Entrada/salida en HASKELL

Description:

El problema de la entrada/salida. Se programa a trav s de funciones matem ticas puras ... (http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm) ... – PowerPoint PPT presentation

Number of Views:195
Avg rating:3.0/5.0
Slides: 28
Provided by: joaquinab
Category:
Tags: haskell | engr | entrada | salida

less

Transcript and Presenter's Notes

Title: Entrada/salida en HASKELL


1
Entrada/salida en HASKELL
Joaquín A. Bujalance Jiménez 2004
2
Índice
  • Introducción
  • El problema de la entrada/salida
  • El tipo IO
  • Operaciones básicas
  • El tipo IOError
  • Ejemplos
  • Bibliografía

3
Introducción
  • Haskell es
  • Un lenguaje funcional puro
  • No estricto
  • Fuertemente tipificado

4
El problema de la entrada/salida
  • Se programa a través de funciones matemáticas
    puras

suma Int -gt Int -gt Int suma x y xy Maingt
suma 3 2 5 Int
5
El problema de la entrada/salida
  • Sea g una función de entrada por teclado
  • g Char
  • Qué devuelve ?
  • Qué problemas conlleva ?

6
El tipo IO
  • Es una mónada
  • Estructura de dato que encapsula una acción
  • getChar IO Char
  • putChar Char -gt IO ()

7
Operaciones básicas
  • getChar IO Char
  • Recibe nada.
  • Acción lee un carácter.
  • Devuelve el carácter leído.

8
Operaciones básicas
  • getLine IO String
  • Recibe nada.
  • Acción lee una línea ( \n ).
  • Devuelve un string.

9
Operaciones básicas
  • getContents IO String
  • Recibe nada.
  • Acción lee una línea ( \n ).
  • Devuelve un string.
  • ( Hace lo mismo que getLine pero utilizando
    evaluación perezosa)

10
Operaciones básicas
  • interact ( String -gt String ) -gt IO ()
  • Recibe una función de tipo String -gt String.
  • Acción lee un String del puerto de entrada, lo
    pasa a la función y el String resultado lo
    escribe en el puerto de salida.
  • Devuelve nada.

11
Operaciones básicas
  • putChar Char -gt IO ()
  • Primitiva.
  • Recibe un carácter.
  • Acción escribe el carácter recibido.
  • Devuelve nada.

12
Operaciones básicas
  • putStr String -gt IO ()
  • Se basa en la primitiva putChar.
  • Recibe un String.
  • Acción escribe el String recibido. Utiliza
    putChar para escribir los caracteres de uno en
    uno.
  • Devuelve nada.

13
Operaciones básicas
  • putStrLn String -gt IO ()
  • Se basa en putStr y hace lo mismo añadiendo un
    carácter de nueva-línea.

14
Operaciones básicas
  • type FilePath String
  • Una forma de nombrar los ficheros. Es un String
    que contiene la ruta del fichero.
  • Internamente utiliza algún método específico de
    implementación para convertir cadenas en
    identificadores de fichero válidos para el
    sistema.

15
Operaciones básicas
  • readFile FilePath -gt IO String
  • Primitiva.
  • Recibe un nombre de fichero.
  • Acción lee el fichero indicado.
  • Devuelve un String con el contenido del fichero.
  • El fichero se lee según se necesita, de forma
    perezosa. En este sentido funciona igual que la
    función getContents.

16
Operaciones básicas
  • writeFile FilePath -gt String -gt IO ()
  • Primitiva.
  • Recibe un nombre de fichero y un String.
  • Acción escribe el String recibido como segundo
    argumento en el fichero indicado. Presupone que
    existe y borra su contenido antes de escribir.
  • Devuelve nada.

17
Operaciones básicas
  • appendFile FilePath -gt String -gt IO ()
  • Primitiva.
  •  
  • Lo mismo que writeFile pero añade el String al
    final del fichero, manteniendo el contenido
    anterior.

18
Operaciones básicas
  • gtgt Monad a gt a b -gt (b -gt a c) -gt a c
  • gtgt Monad a gt a b -gt a c -gt a c
  • do
  • Las acciones se afectúan secuencialmente
  • El ámbito de una variable introducida por lt- son
    las acciones posteriores hasta el final de la
    expresión do
  • El tipo de la expresión do es el tipo de la
    última acción
  • La regla del sangrado de Haskell se aplica tras
    la palabra do, por lo que todas las acciones de
    su ámbito deben estar en la misma columna

19
El tipo IOError
  • Excepciones que se producen al realizar acciones
    de entrada salida
  • Las excepciones pueden ser lanzadas y capturadas

20
El tipo IOError
  • catch IO a -gt ( IOError -gt IO a ) -gt IO a
  • Los manejadores no son selectivos (capturan todas
    las excepciones) por lo que el programador se
    debe encargar de propagar las que no desea
    manejar
  • Ej getChar'           IO Char
    getChar'   getChar catch eofHandler where  
    eofHandler e if isEOFError e then return '\n'
    else ioError e

21
ÍNDICE KWIC (KEYWORD IN CONTEXT) (1)
kwic FilePath -gt FilePath -gt FilePath -gt IO ()
kwic noClavesK títulosK salidaK do
lNoClaves lt- readFile noClavesK lTítulos lt-
readFile títulosK let lKwic kwic'
(creaNoClaves lNoClaves) lTítulos
writeFile salidaK lKwic
22
ÍNDICE KWIC (2)
creaNoClaves String -gt Conjunto
PalabraNoClave creaNoClaves lines gt.gt
map words gt.gt concat gt.gt
map palAMay gt.gt foldr
añadeAConjunto conjuntoVacío
23
ÍNDICE KWIC (3)
kwic' Conjunto PalabraNoClave -gt String -gt
String kwic' palNoClaves lines gt.gt map
words gt.gt creaTkw palNoClaves gt.gt concat gt.gt
dicConTkw gt.gt dicALista gt.gt map snd gt.gt
map ordListaALista gt.gt concat gt.gt map
showgt.gt unlines
24
ÍNDICE KWIC (4)
creaTkw Conjunto PalabraNoClave -gt PalTítulo
-gtTkw creaTkw palNoClaves map (títuloKw
palNoClaves )
títuloKw Conjunto PalabraNoClave -gt Palabra
-gt Palabra -gt Tkw títuloKw palNoClaves pt
títuloKw palNoClaves pt (knt)
estáElemConjunto (palAMay k) palNoClaves sigTs
otherwise (Tkw pt k nt)sigTs where
sigTs títuloKw palNoClaves (pt k) nt
25
ÍNDICE KWIC (5)
dicConTkw Tkw -gt Diccionario PalabraClave
(OrdLista Tkw) dicConTkw foldr (\(Tkw pt k
nt) dic -gt añadeTkw (palAMay k) (Tkw pt k nt)
dic) dicVacío where añadeTkw k tkw dic
actualizaDic k nuevaAsocK dic
where asocK valorODefEnDic k dic
ordListaVacía nuevaAsocK
añadeAOrdLista tkw asocK
26
Bibliografía
  • Razonando con Haskell. Un curso sobre
    programación funcional.
  • Blas C. Ruiz, Fco. Gutiérrez, Pablo Guerrero,
    José E. Gallardo (2004)
  • A Gentle introduction to Haskell.
  • P. Hudak, J. Fasel (1999)
  • Entrada / Salida en Haskell
  • (http//www.info-ab.uclm.es/asignaturas/42630/Buz
    APD/Trabajos/IOHaskell.doc)
  • Introducción al lenguaje Haskell.
    (http//lsi.uniovi.es/labra/FTP/IntHaskell98.pdf)
  • Jose E. Labra G. (1998)
  • IO in Haskell. Using stream- and monad-IO in
    Haskell.
  • Oskar Ojala Helsinki University of Technology

27
Bibliografía
  • IO and monads. Input/output uin a functional
    language.
  • (http//myweb.lsbu.ac.uk/abdallae/units/fp/iomon
    ads.pdfsearch'io20and20monads20input/output2
    0in20a20functional20language)
  • Elements of monadic IO.
  • (http//www-fp.dcs.st-and.ac.uk/kh/papers/io-tut
    orial/io-tutorial.html)
  • The Haskell 98 Library Report Input-Output
  • (http//research.microsoft.com/Users/simonpj/hask
    ell98-revised/haskell98-report-html/io.html)
  • Monads for the Working Haskell Programmer. A
    short tutorial.
  • (http//www.engr.mun.ca/theo/Misc/haskell_and_mo
    nads.htm)
  • Theodore Norvell Memorial University of
    Newfoundland
Write a Comment
User Comments (0)
About PowerShow.com