Entrada/salida en HASKELL Joaquín A. Bujalance Jiménez 2004.

Slides:



Advertisements
Presentaciones similares
Métodos y parámetros.
Advertisements

Lenguaje C++.
PROGRAMACIÓN EN C.
XML XQuery.
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
José Manuel Cortés López Programación Declarativa Avanzada
Lenguajes de programación
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Repaso para la construcción del intérprete 2012
Introducción al lenguaje de especificación JML
Fundamentos de la Programación Estructurada
Programación, Algoritmos y Estructuras de Datos
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
Variaciones sobre un evaluador Objetivo: Mostrar cómo un estilo de programación monádica puede capturar similitudes entre distintas variaciones de un elemental.
Programación monádica
1.2 Sintaxis del lenguaje Java.
Fundamentos de Javascript Desarrollo de Aplicaciones para Internet.
ESTRUCTURAS DE SECUENCIA
ÁRBOLES DE EXPRESION.
String o Cadenas Prof. Gonzalo Pastor. Cadenas o String ► En C, una cadena o texto se define como un vector de caracteres de longitud determinada que.
Conceptos Básicos de Java
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Funciones y procedimientos
El lenguaje de programación C - Funciones -
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Tema 3 Entrada y Salida.
Archivos y Búsqueda Secuencial
Archivos Programación.
Un lenguaje funcional avanzado:
Recursos en español en la Biblioteca de la Universidad Kean Recursos en español en la Biblioteca de la Universidad Kean Kean University Library Spanish-Language.
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Formateador y Analizador de textos
Cadenas y apuntadores Programación.
El lenguaje de programación Java
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Archivos.
Sintaxis.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Informática Ingeniería en Electrónica y Automática Industrial
Conversión cadena a número
CAPITULO 1 - INTRODUCCIÓN Comenzaremos con una rápida introducción al lenguaje C. Mostraremos algunos elementos esenciales del lenguaje en programas reales,
Programación Declarativa Avanzada E.T.S.Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga TIPOS ABSTRACTOS.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
El lenguaje de programación Java
Fundamentos de Programación
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
PROGRAMACION DE ARCHIVOS (MEMORIA SECUNDARIA). Registros y archivos Si bien es cierto que se pueden manejar gran cantidad de datos del mismo y diferente.
Archivos Programación I MC Beatriz Beltrán Martínez.
Teoría – Alejandro Gonzalez
Semantica.
INTEGRANTES LINA JIMÉNEZ LOZANO ROSA ELENA REINA CARLOS VILLADIEGO MARIANO SEPULVEDA.
Introducción Lenguaje de Programación ING2101 SECC Ayud. Ariel Fierro Sáez.
PROGRAMACIÓN CONCURRENTE EN LENGUAJES FUNCIONALES: CONCURRENT HASKELL Rafael Álvarez López Fernando Ávila Ferrer.
FUNDAMENTOS DE PROGRAMACIÓN
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
LENGUAJE “C” Programación.
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
Fundamentos de Programación
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Lic. Carla Aguirre Montalvo
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Clase 1 Gabriela Araya Baez.. Char: Variable que almacena caracteres. Int: Variable que almacena enteros. Float: Variable que almacena decimales. Doble:
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Transcripción de la presentación:

Entrada/salida en HASKELL Joaquín A. Bujalance Jiménez 2004

Índice Introducción El problema de la entrada/salida El tipo IO Operaciones básicas El tipo IOError Ejemplos Bibliografía

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

El problema de la entrada/salida Se programa a través de funciones matemáticas puras suma :: Int -> Int -> Int suma x y = x+y Main> suma :: Int

El problema de la entrada/salida Sea g una función de entrada por teclado g :: Char ¿ Qué devuelve ? ¿ Qué problemas conlleva ?

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

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

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

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)

Operaciones básicas interact::( String -> String ) -> IO () Recibe: una función de tipo String -> 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.

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

Operaciones básicas putStr::String -> 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.

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

Operaciones básicas typeFilePath =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.

Operaciones básicas readFile::FilePath -> 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.

Operaciones básicas writeFile::FilePath -> String -> 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.

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

Operaciones básicas >>= :: Monad a => a b -> (b -> a c) -> a c >> :: Monad a => a b -> a c -> a c do Las acciones se afectúan secuencialmente El ámbito de una variable introducida por <- 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

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

El tipo IOError catch :: IO a -> ( IOError -> IO a ) -> 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

ÍNDICE KWIC (KEYWORD IN CONTEXT) (1) kwic :: FilePath -> FilePath -> FilePath -> IO () kwic noClavesK títulosK salidaK = do lNoClaves <- readFile noClavesK lTítulos <- readFile títulosK let lKwic = kwic' (creaNoClaves lNoClaves) lTítuloskwic'creaNoClaves writeFile salidaK lKwic

ÍNDICE KWIC (2) creaNoClaves :: String -> Conjunto PalabraNoClave creaNoClaves = lines >.> map words >.> concat >.> map palAMay >.> foldr añadeAConjunto conjuntoVacío

ÍNDICE KWIC (3) kwic' :: Conjunto PalabraNoClave -> String -> String kwic' palNoClaves = lines >.> map words >.> creaTkwcreaTkw palNoClaves >.> concat >.> dicConTkwdicConTkw >.> dicALista >.> map snd >.> map ordListaALista >.> concat >.> map show>.> unlines

ÍNDICE KWIC (4) creaTkw :: Conjunto PalabraNoClave -> [PalTítulo] ->[[Tkw]] creaTkw palNoClaves = map (títuloKw palNoClaves []) títuloKw :: Conjunto PalabraNoClave -> [Palabra] -> [Palabra] -> [Tkw] títuloKw palNoClaves pt [] = [] títuloKw palNoClaves pt (k:nt) | estáElemConjunto (palAMay k) palNoClaves = sigTs | otherwise = (Tkw pt k nt):sigTs where sigTs = títuloKw palNoClaves (pt++ [k]) nt

ÍNDICE KWIC (5) dicConTkw :: [Tkw] -> Diccionario PalabraClave (OrdLista Tkw) dicConTkw = foldr (\(Tkw pt k nt) dic -> 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

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 ( ab.uclm.es/asignaturas/42630/BuzAPD/Trabajos/IOHaskell.doc) Introducción al lenguaje Haskell. ( Jose E. Labra G.(1998) IO in Haskell. Using stream- and monad-IO in Haskell. Oskar Ojala Helsinki University of Technology

Bibliografía IO and monads. Input/output uin a functional language. ( ='io%20and%20monads%20input/output%20in%20a%20function al%20language‘) ='io%20and%20monads%20input/output%20in%20a%20function al%20language Elements of monadic IO. ( tutorial.html) tutorial.html The Haskell 98 Library Report Input-Output ( revised/haskell98-report-html/io.html) Monads for the Working Haskell Programmer. A short tutorial. ( Theodore Norvell Memorial University of Newfoundland