José Manuel Cortés López Programación Declarativa Avanzada

Slides:



Advertisements
Presentaciones similares
Diseño y análisis de algoritmos
Advertisements

¿Qué es Sofware? Son el conjunto de instrucciones que dirigen las actividades del Hardware Consiste en programas, módulos de soporte y archivos de datos,
FASES DEL ANALISIS DE PROBLEMAS
Grupo 4 Matías Melgar Pablo Carbonell
INSTITUTO TECNOLOGICO DE MINATITLAN
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Sistemas de Razonamiento Lógico
Tipo de Dato Abstracto Tipos de datos:
Preguntas tipo test (Tema I)
CÁLCULO DIFERENCIAL.
El “sí-mismo”.
DEFINICIÓN MATEMÁTICA DE UNA FUNCIÓN DE VARIABLE REAL.
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
Funciones en lenguaje C
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.
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
T A D : Módulos Los módulos proporcionan la única manera de construir tipos abstractos de datos (TAD) en Haskell.
Tema 6: Clases Antonio J. Sierra.
Juan José Cortés Orozco. Antonio Muñoz Torres.
Probabilidad condicional
Ingeniero Anyelo Quintero
Semana 5 Subprogramas..
Licenciatura en Ciencias de la Computación Álgebra I Clase 1

INGENIERIA EN SISTEMAS COMPUTACIONALES
DISEÑO DE SOFTWARE 1ª. Parte
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.
Concatenación en PHP Programación en Internet II.
PROGRAMACIÓN PROCEDIMENTAL
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
Material de apoyo Unidad 4 Estructura de datos
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 13/05/2006.
PROBLEMA DE MATEMÁTICAS (Polinomios, 3º ESO, Tema 5)
Lenguajes de programación. Lenguaje máquina El ordenador sólo sabe hacer un número limitado de tareas (muy pocas) definidas electrónicamente en su procesador.
Introducción a la programación
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Ecuaciones Algebraicas
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 15/08/2006.
Patricio A. Castillo José M. Galarce Agosto 23 de 2008 Segunda Clase.
OPERACIONES CON FUNCIONES
DEV- C++ ·include <iostream> Int x x=x+2(x)
INTRODUCCION A LA PROGRAMACION
PRINCIPIOS DE PROGRAMACIÓN
Elaboración de algoritmos usando lógica de programación
IDENTIFICACIÓN DEL CICLO DE VIDA DEL SOFTWARE. POLITÉCNICO COLOMBIANO JAIME ISAZA CADAVID.
MATEMÁTICA BÁSICA CERO
Enseñar con Aprendizaje Basado en Problemas
Objetivos del tema. Hemos visto lo que es la estructura de un programa, los datos, que esos datos en realidad se convierten en variables de distinto.
Programación Java y Desarrollo de Aplicaciones Modulo 1 Arquitectura de ordenadores Tema 3 Programas.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
Para aplicaciones.   Una variable es un espacio de memoria en donde se almacenan datos 1. VARIABLES.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Operaciones con funciones
Números racionales Lorenzo Contreras Garduño Ago. 2015
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Curso de programación Visual Chart 6 (1ªEd.)
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Ing. Barros Rodriguez D. Ronald Introducción a la Programacón.
Transcripción de la presentación:

José Manuel Cortés López Programación Declarativa Avanzada Promoción Numérica José Manuel Cortés López Programación Declarativa Avanzada

Índice Problema a resolver Ejemplo del problema Soluciones Implementación en Haskell Revisión del concepto Conclusiones Bibliografía

Problema a resolver Vamos a considerar el problema de recoger los valores devueltos por una función numérica y asignarlos a los correspondientes tipos que representen los dominios correctos de esos valores. Decidir el tipo de los valores devueltos por una función no es trivial, y mucho menos si esto ha de hacerlo el sistema cuando se encuentra ejecutando la función.

Ejemplo del problema La función sumar: Queremos construir una función que devuelva la suma de dos números cualesquiera. Hay que considerar que los tipos de los argumentos pueden ser distintos, y además el valor devuelto por la función puede ser distinto según los valores de los argumentos. 2 + 3 = 5 2 + 4.0 = 6.0 2.0 + 7.0 = 9.0

Primera solución Podemos salir del paso forzando a que se devuelvan valores de los tipos que consideremos, aunque sabemos que esta medida no se corresponde con lo que deseamos realmente. ¿ 2 + 3 = 5.0 ?

Una solución mas elegante Otra solución es que las expresiones estén definidas en término de unas clases más generales y sea el compilador quien decida a que subclase numérica pertenece. Éstas clases generales son apropiadas para hacer corresponder los tipos de la función sin crear ningún tipo de ambigüedad.

Una solución mas elegante II Para que esta última idea sea posible, debemos incorporar al lenguaje no sólo esos tipos generales de números que engloban a los ya existentes, sino una serie de funciones que indiquen el tipo procedente de un dato, así como la conversión de un dato de un tipo determinado a otro.

Una solución mas elegante III En general, la promoción solo es una reinterpretación del valor dado en el ámbito de un tipo general. Un valor numérico de un tipo, incluyendo los tipos numéricos universales, puede promocionar a otro tipo numérico convirtiendo los valores enteros a punto flotante y adaptando la longitud si es necesario. El redondeo de números en punto flotante a flotantes de baja precisión o a enteros debe ser siempre especificado por operaciones explícitas.

¿Cómo se hace esto? Para que esta última idea sea posible, debemos incorporar al lenguaje no sólo esos tipos generales de números que engloban a los ya existentes, sino una serie de funciones que indiquen el tipo procedente de un dato, así como la conversión de un dato de un tipo determinado a otro.

Como lo implementa Haskell I El Prelude y las librerías proporcionan varias funciones sobrecargadas que pueden utilizarse para la promoción explícita:   fromInteger         :: (Num a) => Integer -> a      fromRational       :: (Fractional a) => Rational -> a      toInteger           :: (Integral a) => a -> Integer      toRational          :: (RealFrac a) => a -> Rational      fromIntegral       :: (Integral a, Num b) => a -> b      fromRealFrac     :: (RealFrac a, Fractional b) => a -> b      fromIntegral        = fromInteger . toInteger      fromRealFrac        = fromRational . toRational Escribir un numero flotante (con un punto decimal) es visto como una aplicación de fromRational al valor del número como Rational. Es decir, 7 tiene el tipo (Num a) = > a, y 7.3 tiene el tipo (Fractional a) => a.

Como lo implementa Haskell II En la siguiente imagen vemos la jerarquía de clases que están definidas en Haskell y podemos apreciar como el tipo numérico (Num) representa a los números en general.

¿Lo incorporan realmente los lenguajes de programación? Ejemplos sobre Haskell, Prolog, Java, Lisp.

Revisión del concepto Por ello surge el concepto de promoción numérica, y viene a decir básicamente que una función puede estar descrita en términos de unas clases numéricas que van a estar sobrecargadas, por eso cuando realizamos la siguiente operación:

Ejemplo de implementación Entonces cabe plantearse, ¿Cómo está definida esa división? Para conocer la definición tecleamos la directiva de búsqueda en Hugs (:f +) y nos conduce directamente hasta la definición del módulo de definiciones básicas del programa. Obtenemos el siguiente resultado:

Conclusiones La promoción numérica acerca mucho más los lenguajes de programación a la concepción humana de los cuerpos numéricos definidos en la matemática. La posibilidad de definir funciones sobre esa jerarquía de conjuntos numéricos facilita la comprensión del lenguaje y hace más eficiente la tarea de codificar ciertas funciones matemáticas.

Bibliografía Blas C. Ruiz Jiménez, Francisco Gutiérrez López, etc., Razonando con Haskell. Una introducción a la programación funcional, manual de la universidad, año 2000. Tutorial Haskell 98, A Gentle Introduction to Haskell, Version 98, link sobre numbers. http://www.info.uni-karlsruhe.de/~sather/sk14/node41.html