Departamento de Informática Universidad Técnica Federico Santa María Lenguajes Funcionales Francisco Bórquez Departamento de Informática Universidad Técnica.

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

Estrella 0 - Fundamentos de la Programación
2 Estructuras lineales.. Qué es una estructura? La estructura es una manera de conectar los valores y de manera automática conectarlos de manera que tengan.
PROF. ING. JULIO CESAR CANO RAMIREZ
UNIDAD II: ALGORITMOS Y LENGUAJES
EL CÁLCULO LAMBDA λ.
ALGEBRA RELACIONAL Y CALCULO RELACIONAL CON REFERENCIA A BASE DE DATOS
Programación I Teoría III
Técnico en programación de Software
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Estructuras de control
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
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.
PROGRAMACIÓN LÓGICA.
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
ESTRUCTURAS DE CONTROL
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
Programación de Computadores
Semana 5 Subprogramas..
Academia de Informática
Programación en Matlab
CARACTERÍSTICAS DE LOS PROGRAMAS
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Problemas, algoritmos y programas: Modelar: Simular o programar su solución en un computador. Algoritmos: Es un conjunto finito, y no ambiguo de etapas.
Subconsultas Avanzadas
Sintaxis.
Capítulo 1 “Elementos de Programación”
Inteligencia artificial
Introducción a LISP Sergio Jiménez Celorrio Departamento Ingeniería Informática – UC3M.
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.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
ESTRUCTURA DE DATOS ESD-243
Historia. Historia Historia Su nombre rinde homenaje a: Haskell Brooks Curry ( ) Lógico y matemático norteamericano Pionero de la lógica.
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.
Material de apoyo Unidad 4 Estructura de datos
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Operadores lógicos en PHP Programación en Internet II.
VBA – Elementos del Lenguaje
Estructuras de Control.
PENSAMIENTO ANALÍTICO SISTÉMICO DAISY KATERINE RODRÍGUEZ DURÁN
Introducción a la programación
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
1 Samba: Un lenguaje funcional perezoso Presentación del lenguaje: qué es un programa Samba definiciones locales abstracciones lambda Tipos inductivos:
Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo.
Departamento de Informática Universidad Técnica Federico Santa María Temas 2,3,4: Estructura de un Programa Pascal Declaraciones Tipos de Datos Simples.
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
Términos algoritmo diseñar algoritmo implementar algoritmo
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
Patricio A. Castillo José M. Galarce Agosto 23 de 2008 Segunda Clase.
Programación Básica con NQC Patricio A. Castillo 12/04/2008.
PRINCIPIOS DE PROGRAMACIÓN
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Presente un cuestionario con los aspectos mas importantes sobre los
Metodología de la programación
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
Lic. Carla Aguirre Montalvo
Lenguaje de Programación LISP
PARADIGMA Es un marco de referencia que impone reglas sobre cómo se deben hacer las cosas. CONCEPTO DE PARADIGMA DE PROGRAMACION colección de modelos conceptuales.
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
Décimo Curso de Programación Básica con NQC “Segunda Clase” Cristián Arenas Ulloa Agosto 29 de 2009.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
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.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Transcripción de la presentación:

Departamento de Informática Universidad Técnica Federico Santa María Lenguajes Funcionales Francisco Bórquez Departamento de Informática Universidad Técnica Federico Santa María Marzo,2010

Departamento de Informática Lenguajes de Programación ILI-153 Concepto de función Recordando el paradigma imperativo: Consecuencia de la arquitectura de von Neumann

Departamento de Informática Lenguajes de Programación ILI-153 Concepto de función Por lo que en el paradigma imperativo: Una función es una secuencia de instrucciones El valor de retorno se obtiene a través de una serie de manipulaciones de estado Existencia de estado implica posibles efectos laterales 3

Departamento de Informática Lenguajes de Programación ILI-153 Concepto de función En matemáticas una función es un mapeo de los elementos de un conjunto a los de otro: f:A  B Generalmente descrita por una expresión o una tabla de valores Evaluación controlada por recursión y expresionescondicionales Libre de efectos laterales

Departamento de Informática Lenguajes de Programación ILI-153 Influencia del paradigma imperativo en la programación Lenguajes imperativos están diseñados para explotar la arquitectura del computador Apego a la arquitectura es una restricción innecesaria al proceso de desarrollo de software Lenguajes diseñados según otros paradigmas son impopulares debido a penalizaciones de rendimiento Modelo matemático para estudiar capacidades y limitaciones del computador es la Máquina de Turing 5

Departamento de Informática Lenguajes de Programación ILI-153 Un poco de Historia Desde algunos puntos de vista, la historia de la teoría de lenguajes de programación precede incluso al desarrollo de los propios lenguajes de programación. El cálculo lambda, desarrollado por Alonzo Church, Max HL. Solis Villareal y Stephen Cole Kleene en la década de 1930, es considerado ser uno de los primeros lenguajes de programación del mundo Incluso pese a que tenía intención de modelar la computación más que ser un medio para que los programadores describan algoritmos para un sistema informático. Ahora muchos lenguajes de programación funcional se han caracterizado por proveer una "fina apariencia" al cálculo lambda, y muchos se describen en sus términos. 6

Departamento de Informática Lenguajes de Programación ILI-153 Fundamentos de los lenguajes funcionales Objetivo: emular las funciones matemáticas lo más posible. –No se usa variables ni asignaciones. –Repetición a través de recursión. –Transparencia referencial. –Funciones son objetos de primera clase. –Un programa consiste de definiciones de funciones y aplicaciones de ellas.

Departamento de Informática Lenguajes de Programación ILI-153 Funciones Funciones simples Ejemplo: cubo(x) = x * x * x x representa cualquier valor del dominio, pero está fijo en un elemento específico durante la evaluación Durante la evaluación, cada aparición de un parámetro está ligada a un valor y es considerada constante Notación lambda para funciones anónimas: Evaluación de una función anónima:

Departamento de Informática Lenguajes de Programación ILI-153 Funciones Formas funcionales (funciones de mayor orden) Reciben funciones como parámetros, o entregan funciones como resultado. Por ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Comparación entre un programa imperativo y uno funcional Problema sencillo: aplicar dos funciones a una lista de valores Programa imperativo: Distintas versiones funcionales del mismo programa:

Departamento de Informática Lenguajes de Programación ILI-153 Introducción a Scheme Características: –dialecto de LISP (Primer funcional 1958) –sintaxis y semántica simples –nombres tienen ámbito estático –no es puramente funcional

Departamento de Informática Lenguajes de Programación ILI-153 Funcionamiento del intérprete de Scheme Entorno interactivo implementa un ciclo lectura-evaluación-escritura Se puede cargar las expresiones desde un archivo para facilitar el desarrollo. Las llamadas a funciones se evalúan así: 1.se evalúa los parámetros; 2.se aplica la función sobre los parámetros.

Departamento de Informática Lenguajes de Programación ILI-153 Funcionamiento del intérprete de Scheme Ejemplo de sesión interactiva 12 --> 12 ’ ( ) --> ( ) ( ) --> 6 (string-append “hola ” ”mundo” ) --> ”hola mundo”

Departamento de Informática Lenguajes de Programación ILI-153 Sintaxis del lenguaje Scheme utiliza la misma sintaxis para: 1.listas: ( ) 2.llamadas a función: (max ) 3.formas sintácticas: ( if (< x 0) x (- x ) )

Departamento de Informática Lenguajes de Programación ILI-153 Constantes literales Valores literales pueden ser: números enteros, reales, racionales y complejos: / i 5. 0 strings: ”Hola mundo” caracteres: #\a #\space booleanos: #t #f

Departamento de Informática Lenguajes de Programación ILI-153 Listas Notación de listas: ( a b c d ) Los elementos pueden ser de cualquier tipo: ( 1. 0 ”Hola mundo” 3) Las listas se pueden anidar: ( a ( b c ) ( d e ( f ) g ) ) Las listas se tratan como objetos inmutables

Departamento de Informática Lenguajes de Programación ILI-153 Representación interna de las listas Implementadas como listas enlazadas Los nodos se llaman pares o celdas cons El final de una lista se marca con la lista vacía

Departamento de Informática Lenguajes de Programación ILI-153 Representación interna de las listas Implementadas como listas enlazadas Los nodos se llaman pares o celdas cons El final de una lista se marca con la lista vacía

Departamento de Informática Lenguajes de Programación ILI-153 Celdas cons Las celdas cons son el tipo de datos estructurado fundamental de Scheme. El campo izquierdo de una celda se denomina el car, y el campo derecho, el cdr. En una lista enlazada propia, las celdas tienen: –un valor en el car; –una referencia a una lista en el cdr.

Departamento de Informática Lenguajes de Programación ILI-153 Des/componiendo una lista Las funciones car y cdr obtienen el car y el cdr de una celda. La función cons permite crear una celda cons definiendo su car y su cdr, y por lo tanto se puede usar para crear listas enlazadas. ( c a r ’ ( ) ) --> 1 ( cdr ’ ( ) ) --> ( ) ( cons ’ a ’ ( b c d ) ) --> ( a b c d )

Departamento de Informática Lenguajes de Programación ILI-153 Listas impropias Una lista es impropia cuando el cdr de su última celda no es la lista vacía. Las listas impropias se representan usando la notación de par con punto.

Departamento de Informática Lenguajes de Programación ILI-153 Listas impropias Una lista es impropia cuando el cdr de su última celda no es la lista vacía. Las listas impropias se representan usando la notación de par con punto.

Departamento de Informática Lenguajes de Programación ILI-153 Listas impropias Una lista es impropia cuando el cdr de su última celda no es la lista vacía. Las listas impropias se representan usando la notación de par con punto.

Departamento de Informática Lenguajes de Programación ILI-153 Llamadas a funciones Llamadas a funciones utilizan la misma notación que las listas: Para evitar que una lista sea evaluada como función, se utiliza el operador de citado:

Departamento de Informática Lenguajes de Programación ILI-153 Funciones aritméticas Scheme provee las funciones aritméticas elementales +, -, * y /: Notación prefija evita ambigüedad en la evaluación.

Departamento de Informática Lenguajes de Programación ILI-153 Funciones anónimas La forma sintáctica lambda permite definir funciones anónimas. Sintaxis: Ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Sintaxis alternativas de lambda Guarda en args la lista de todos los argumentos: Guarda en rest todos los argumentos adicionales:

Departamento de Informática Lenguajes de Programación ILI-153 Ligados locales La forma sintáctica let establece ligados de nombres locales. Nombres ligados con let son visibles sólo en el cuerpo del let. Sintaxis: Ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Definiciones de nivel superior La forma sintáctica define liga un nombre a una expresión. Sintaxis: (define nombre expr ) Ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Declaración de Funciones (define (sqr n) (* n n)) define es especial, el cuerpo no es evaluado sino que produce un ligado, en este caso sqr es ligado al cuerpo: (lambda (n) (* n n)) define puede producir ligado de valores: (define x 15) (sqr x) => 225

Departamento de Informática Lenguajes de Programación ILI-153 Funciones como argumentos (define (mapa fun lis) (cond (null? lis) '()) (cons (fun (car lis)) (mapa fun (cdr lis)))) (map sqr (map sqr ‘( ))) => ( )

Departamento de Informática Lenguajes de Programación ILI-153 Expresiones condicionales simples La forma sintáctica if permite evaluar una expresión de manera condicional. Sintaxis: (if condicion consecuencia alternativa) Ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Expresiones condicionales múltiples La forma sintáctica cond permite evaluar una expresión usando distintos casos. Sintaxis: ( cond clausula1 clausula2...) Cada cláusula tiene alguna de estas formas: (condicion) (condicion expr1 expr2...) (condicion => expr) La última cláusula puede tener la forma: ( else expr1 expr2...)

Departamento de Informática Lenguajes de Programación ILI-153 Ejemplo de uso de cond

Departamento de Informática Lenguajes de Programación ILI-153 Evaluación de valores de verdad Todos los objetos son considerados verdaderos, excepto #f. Existen las formas sintácticas and, or y not. and y or hacen cortocircuito. En general, los predicados lógicos tienen nombres terminados en ?.

Departamento de Informática Lenguajes de Programación ILI-153 Ejemplos de valores de verdad ( f 1 ’ t r u e ’ f a l s e ) --> t r u e ( f ’ ( ) ’ t r u e ’ f a l s e ) --> t r u e ( f #f ’ t r u e ’ f a l s e ) --> f a l s e ( not #t ) --> #f ( not ” f a l s e ” ) --> #f ( or ) --> #f ( or #f #t ) --> #t ( or #f ’ a #t ) --> ’ a 36

Departamento de Informática Lenguajes de Programación ILI-153 Ejemplos de predicados lógicos Como las variables carecen de tipología necesitan pruebas en tiempo de ejecución que determinen su tipo: symbol? number? list? null? zero?

Departamento de Informática Lenguajes de Programación ILI-153 Ejemplos de predicados lógicos (< ) --> #t ( null ? ’ ( ) ) --> #t ( null ? ’ ( ) ) --> #f ( par ? ’ ( 8. 2 ) ) --> #t ( eqv ? 3 2) --> #f ( number ? 15) --> #t ( list ? ”Veamos si soy una lista... ” ) --> #f

Departamento de Informática Lenguajes de Programación ILI-153 Recursión simple En Scheme, la iteración se hace usando recursión. La recursión es más general que construcciones tipo for o while, y elimina la necesidad de usar variables de control. Una función recursiva debe tener: 1.un caso base, y 2.un paso de recursión. Ejemplo:

Departamento de Informática Lenguajes de Programación ILI-153 Recursividad Simple En el ejemplo anterior en cada llamada recursiva, la expresión queda pendiente de evaluarse hasta que se obtenga el resultado de la siguiente llamada. Y así sucesivamente, todas las operaciones quedan pendientes hasta que la condición de terminación desencadene hacia atrás todas las evaluaciones. 40

Departamento de Informática Lenguajes de Programación ILI-153 Recursividad Simple: Tamaño lista (define tamano_lista (lambda (lista) (if (null? lista) 0 (+ 1 (tamano_lista (cdr lista)))))) Corremos el riesgo de agotar el espacio de stack de ejecución. ¿Podemos hacer recursividad sin agotar los recursos? 41

Departamento de Informática Lenguajes de Programación ILI-153 Recursividad de cola Es necesario utilizar una función auxiliar que tiene un argumento más. En este parámetro adicional se van almacenando los valores parciales de cada llamada recursiva, y éstos se utilizan en la siguiente llamada de modo que al llegar a la condición de terminación no quedan evaluaciones pendientes. 42

Departamento de Informática Lenguajes de Programación ILI-153 Recursividad de Cola: Tamaño lista (define tamano_lista_tail (lambda (lista contador) (if (null? lista) contador (tamano_lista_tail (cdr lista) (+ 1 contador))))) 43

Departamento de Informática Lenguajes de Programación ILI-153 Ahora para que quede con un parámetro igual que la recursividad simple (define real_tamano_lista (lambda (lista) (tamano_lista_tail lista 0))) 44

Departamento de Informática Universidad Técnica Federico Santa María Fin