Variaciones sobre un evaluador Objetivo: Mostrar cómo un estilo de programación monádica puede capturar similitudes entre distintas variaciones de un elemental.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de Java Capitulo 6: Cadenas y Arrays Profesor:
Programación Interactiva Manejo de Excepciones
Manejo de errores y excepciones
XML XQuery.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Programación en Java Instructor:.
MANEJO DE EXCEPCIONES EN C++
Desarrollo de Aplicaciones para Internet
SESION 4 PROGRAMACIÓN. Septiembre 2010 SESION 3: OPERADORES 1 Comentarios /* */ // /// La guía de estilo de UA determina que: No se debe escribir comentario.
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
1 Agregando primitivas 2 Introducción Ahora presentaremos cómo agregar operaciones primitivas a la máquina G. Entenderemos como operaciones primitivas.
Programación monádica
Combinadores SK.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
Informática II Prof. Dr. Gustavo Patiño MJ
EXCEPCIÓN DE ERRORES.
PL/SQL Francisco Moreno Universidad Nacional.
ESTRUCTURAS DE SECUENCIA
Una breve introducción
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
Subrutinas.
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.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
PL/SQL Francisco Moreno Universidad Nacional.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Universidad de Tarapacá Fundamentos Lenguaje y Programación Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales.
Tema 6: Clases Antonio J. Sierra.
Tema 4: Sentencias de control
Arboles Binarios de expresiones
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
Manejo de Excepciones Agustín J. González ELO329.
Semana 5 Subprogramas..
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
Formateador y Analizador de textos
Análisis de Algoritmos
Ing. Ricardo Carlos Inquilla Quispe
Capítulo 1 “Elementos de Programación”
Conversión cadena a número
Tema 11: Excepciones Antonio J. Sierra.
El diseño de la computadora es simple. La elegancia del diseño consiste en que estas operaciones simples pueden servir para resolver problemas complejos.
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
COMPUTACION 2009 C lase 4 Programa PASCAL SENTENCIAS DATOS Expresiones Tipos Declaración de variables Declaración de variables Asignación Entrada/Salida.
Computación II Unidad X Manejo de Excepciones. Presentación de la Unidad Objetivos: –Saber manejar situaciones inesperadas dentro de un programa –Comprender.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
1002 JM while not detener: adivina = int(raw_input('Ingrese un entero : ')) if adivina == numero: print 'Felicitaciones, haz adivinado!.' detener = True.
Módulo 8: Manejo de Errores y Excepciones
Operadores lógicos en PHP Programación en Internet II.
Estructuras de Control.
EI, Profesor Ramón Castro Liceaga Agosto de 2005 UNIVERSIDAD LATINA (UNILA) PROGRAMACION ORIENTADA A OBJETOS EN JAVA (Optativa) ESTRUCTURA DEL LENGUAJE.
Estructuras de Repetición (Hacer-Mientras)
Organización de la Computadora
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
El lenguaje de programación C - Control de flujo y bucles -
Introducción al lenguaje PROCESSING para ARDUINO
Estructuras de Decisión
int cantidad, horas, cuota; float precio, peso; cantidad = 5; // Le asigno un número a la variable Cantidad; horas = // Le asigno 30 a la variable.
Excepciones predefinidas en PL/SQL Semana 6. Aprendizajes esperados Construye procedimientos almacenados, triggers de base de datos, cursores y funciones.
Optimización automática de programas (OAP) Germán Vidal 1 Optimización automática de programas Tema 3: Funciones, tipos y expresiones 3.1. Intérpretes,
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:
Ada 2º Parte (variables, ámbitos, subrutinas, tipos abstractos de datos y excepciones)
U2 Tipos de datos, referenciación y errores 1. Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Introducción a programación web Martin Esses. En las presentaciones anteriores, vimos como enviar datos a un controlador usando POST y como generar formularios.
Transcripción de la presentación:

Variaciones sobre un evaluador Objetivo: Mostrar cómo un estilo de programación monádica puede capturar similitudes entre distintas variaciones de un elemental evaluador de expresiones. Más importante, como permite que cada variación sea introducida sin cambiar la estructura básica del programa. Comenzaremos con un (muy) simple evaluador, al que luego le agregaremos: Manejo de errores Conteo de operaciones efectuadas Traza de ejecuciones.

El evaluador data Term = Con Int | Div Term Term eval :: Term Int eval (Con x) = x eval (Div t u) = (eval t) div (eval u) answer, wrong :: Term answer = Div (Div (Con 1972) (Con 2)) (Con 23) wrong = Div (Con 2) (Div (Con 1) (Con 0)) ? eval answer 42 ? eval wrong [BOOM!]

Excepciones Modificar al evaluador para que controle división por 0 y devuelva un mensaje apropiado. No queremos usar error (prolijidad, interacción, etc.) data Exc = Raise Exception | Return type Exception = String El tipo Exc representa computaciones de valores de tipo que pueden generar una excepción.

Evaluador con excepciones eval :: Term Exc Int eval (Con x) = Return x eval (Div t u) = h (eval t) where h (Raise e) = Raise e h (Return x) = h (eval u) where h (Raise e) = Raise e h (Return y) = if y = = 0 then Raise division by zero else Return (x div y)

Evaluador con excepciones (2) En cada llamada de eval la forma del resultado es inspeccionada. Si una excepción fue levantada, entonces sigue siendo levantada. Cómo desplegar excepciones: instance Show Show (Exc where show (Raise e) = exception: ++ e show (Return x) = value: ++ show x ? eval answer value: 42 ? eval wrong exception: division by zero

Estado Ahora queremos contar el número de divisiones efectuadas al evaluar una expresión. Se intoduce un componente adicional Estado: Un valor de tipo Int, inicializado en 0 e incrementado en 1 cada vez que ocurre una división. newtype St = MkSt (State (, State)) type State = Int apply :: St State (, State) apply (MkSt f) s = f s

Evaluador con estado eval :: Term St Int eval (Con x) = MkSt f where f s = (x,s) eval (Div t u) = MkSt f where f s = (x div y, s + 1) where (x, s) = apply (eval t) s (y, s) = apply (eval u) s En cada llamada del evaluador el transformador de estado es aplicado a un estado y devuelve un valor y el estado modificado. instance Show Show (St where show f = value: ++ show x ++, count: ++ show s where (x,s) = apply f 0

Salida Ahora se quiere desplegar una traza de los pasos de ejecución de la evaluación de una expresión. Para eso introduciremos un tipo que nos permite representar computaciones que generan output. newtype Out = MkOut (Output, type Output = String eval :: Term Out Int eval (Con x) = MkOut (line (Con x) x), x) eval (Div t u) = MkOut (ox ++ oy ++ line (Div t u) z, z) where MkOut (ox, x) = eval t MkOut (oy, y) = eval u z = x div y line :: Term Int Output line t x = term: ++ show t ++,yields ++ show x ++ \n

Salida (2) En cada llamada al evaluador las salidas son colectadas y ensambladas para formar la salida de la llamada principal. instance Show Show (Out where show (MkOut (ox,x)) = ox ++ value: ++ show x ? eval answer term: Con 1972, yields 1972 term: Con 2, yields 2 term: Div (Con 1972) (Con 2), yields 986 term: Con 23, yields 23 term: Div (Div (Con 1972) (Con 2)) (Con 23), yields 42 value: 42 Notar que la traza de ejecución puede ser fácilmente cambiada para que imprima en orden inverso.