1 Samba: Un lenguaje funcional perezoso Presentación del lenguaje: qué es un programa Samba definiciones locales abstracciones lambda Tipos inductivos:

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

TECNICATURA UNIVERSITARIA EN INFORMATICA
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Elementos básicos del Lenguaje
Polimorfismo Unidad 4.
Interpretando objetos
1 Tipos inductivos y Pattern Matching Introducción a tipos inductivos y pattern matching Abstracciones con pattern matching. Traducción a cálculo lambda.
Reducción de grafos Qué es reducción normal de grafos? Ejemplo:
Compilación de Lenguajes Funcionales Perezosos
Combinadores SK.
Informática II Prof. Dr. Gustavo Patiño MJ
Introducción y sintaxis
Algoritmos y Estructuras de Datos
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
El lenguaje de programación C - Funciones -

FUNCIONES Y PROCEDIMIENTOS
Creación de una librería propia. Conceptos Básicos Interfaz –El concepto formal se refiere al límite entre dos entidades distintas. –Al hablar de librerías,
T A D : Módulos Los módulos proporcionan la única manera de construir tipos abstractos de datos (TAD) en Haskell.
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Tema 6: Clases Antonio J. Sierra.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
PROGRAMACIÓN LÓGICA.
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
TRADUCTOR DE UN PROGRAMA
Un lenguaje funcional avanzado:
Semana 5 Subprogramas..
Academia de Informática
1 CALCULO DE PREDICADOS Introducción y sintaxis äPermite acceder a los componentes de una aserción individual äLas expresiones pueden contener variables,
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Subconsultas Avanzadas
Compiladores Optimizaciones Tradicionales Simplificación Algebraica, Copy Propagation, y Constant Propagation.
Sintaxis.
Estructura de Datos y Algoritmos
TIPOS DE DATOS ABSTRACTOS
Clases y objetos. La unidad fundamental del lenguaje Java es la clase, que proporciona la estructura de los objetos y mecanismos para fabricarlos, a partir.
1.1 Concepto y terminología
Extensiones sintácticas Revisaremos formas especiales que son sintácticamente equivalentes a patrones que son expresables en términos de formas básicas.
Tipos de Datos (Data Types)
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
ALGORITMOS Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos. En un algoritmo siempre debe.
Agenda Clase 16 Motivación e Historia de la Programación Funcional y la Programación Lógica. Concepto y Características de la Programación Funcional. Ventajas.
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Elementos básicos del lenguaje
El Concepto de Tipo Los tipos permiten indicar la característica de los valores (datos) manipulados en un programa. Toda variable tiene asociado un tipo.
1 Compilación de Pattern Matching Un ejemplo: zipWith f [] ys = [] zipWith f (x:xs) [] = [] zipWith f (x:xs) (y:ys) = f x y : zipWith f xs ys Semántica.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
1 Compilación, pereza y expresiones let(rec) 2 Compilando un programa Describiremos un compilador para la máquina minimal usando un conjunto de esquemas.
1 Agregando estructuras de datos. 2 Introducción Ahora extenderemos a la máquina G para poder manipular estructuras de datos. En esta versión el objetivo.
Programación Orientada a Objetos
1 3 : METODOLOGÍA DE LA. PROGRAMACIÓN. 2 Metodología de la programación Definiciones Lenguajes de programación Traductores Ciclo de vida de los programas.
Términos algoritmo diseñar algoritmo implementar algoritmo
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Patricio A. Castillo José M. Galarce Agosto 23 de 2008 Segunda Clase.
1 Las máquinas TIM y Spineless-Tagless G. 2 TIM: La máquina de tres instrucciones En principio TIM parece ser una máquina de reducción de grafos muy diferente.
PRINCIPIOS DE PROGRAMACIÓN

TIPOS DE DATOS ABSTRACTOS
Informática Ingeniería en Electrónica y Automática Industrial
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Décimo Curso de Programación Básica con NQC “Segunda Clase” Cristián Arenas Ulloa Agosto 29 de 2009.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
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.
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.
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
U niversidad de G uadalajara Centro Universitario de Ciencias Exactas e Ingenierías Ponentes: Muñoz Guzmán Ramón Gallardo Olivares Mario Solís Flores José.
Departamento de Informática Universidad Técnica Federico Santa María Lenguajes Funcionales Francisco Bórquez Departamento de Informática Universidad Técnica.
Transcripción de la presentación:

1 Samba: Un lenguaje funcional perezoso Presentación del lenguaje: qué es un programa Samba definiciones locales abstracciones lambda Tipos inductivos: representación de constructores, expresiones case Sintaxis concreta del lenguaje Sintaxis abstracta: los tipos Expr, ScDefn y Program

2 Programas Samba Ejemplo: main = double 21 double x = x + x Un programa Samba es un conjunto de definiciones de supercombinadores, uno de ellos debe ser main. Para ejecutar el programa main es evaluado. Supercombinadores pueden definir funciones, lo que es el caso de double. Notar que no todos los supercombinadores tiene argumentos: CAFs (constant applicative forms).

3 Definiciones locales Usando el constructor let del lenguaje, se pueden introducir definiciones locales en supercombinadores: main = quadruple 20 quadruple x = let twice_x = x + x in twice_x + twice_x Una expresión let no es recursiva. Para expresiones recursivas Samba usa el constructor letrec. Por ejemplo: infinite n = letrec ns = cons n ns in ns El constructor let es más simple de implementar que el constructor letrec.

4 Abstracciones lambda Funciones son expresadas en el lenguaje por medio de definiciones top-level de supercombinadores. Sin embargo, a veces es conveniente expresar funciones usando explícitamente abstracciones lambda. Samba provee un constructor para hacer esto: doubleList xs = map (\x -> 2 * x) xs Es posible transformar un programa en el que abtracciones aparecen explícitamente en uno equivalente que sólo use supercombinadores. Este proceso se llama lambda lifting, y será discutido posteriormente en el curso.

5 Tipos de datos inductivos Una característica de los l.f.m. es la posibilidad de definir tipos inductivos (estructurados, algebraicos, concretos,etc.). Ej. data Colour = Red | Green | Blue data List a = Nil | Cons a (List a) Cada def. introduce un nuevo tipo junto con uno o más constructores. El tipo List es un ejemplo de tipo parametrizado. Valores de tipos inductivos son construidos usando los constructores: Green, Cons 1 Nil, etc.

6 Pattern Matching Valores estructurados pueden ser discriminados usando pattern matching: isRed Red = True isRed Blue = False isRed Green = False null Nil = True null (Cons _ _) = False

7 Tipos inductivos en Samba Cómo representaremos y manipularemos tipos inductivos en Samba? El objetivo es evitar tener declaraciones de tipos en el lenguaje. Nuestro enfoque será el siguiente: Usar una representación simple y uniforme de constructores Compilar declaraciones de supercombinadores que hacen uso de patter matching en expresiones case simples

8 Representación de constructores En vez de permitir constructores definidos por el usuario, Samba provee una única familia de constructores: Pack{tag, aridad} tag es un entero que permite identificar al constructor, y aridad indica cuantos son los argumentos del mismo. Por ejemplo: Red = Pack{1,0} Green = Pack{2,0} Blue = Pack{3,0} Nil = Pack{5,0} Cons = Pack{6,2} En un programa que ha sido type-chequeado objetos de diferentes tipos no necesitan ser distinguidos en tiempo de ejecución, entonces tags sólo necesitan ser únicos dentro de un tipo inductivo

9 Expresiones case En general, el pattern matching permitido por l.f.m. puede llegar a ser bastante complejo, con patterns anidados, overlapeados, con guardas, etc. En Samba eliminamos estas complicaciones, y solo proveeremos expresiones case simples: isRed c = case c of null l = case l of -> True; -> True -> False; x xs -> False -> False Cada alternativa del case consiste de un tag seguido de variables (tantas como la aridad del constructor). No se permiten patterns anidados.

10 Un front-end para Samba Fuente SambaParser Type Checker Compilación de Pattern matching Lambda Lifting Programa Core Compilador G Intérprete G