SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Tema 1: Introducción a la programación funcional
                  Informática (2010–11)


                  José A. Alonso Jiménez

                Grupo de Lógica Computacional
        Departamento de Ciencias de la Computación e I.A.
                     Universidad de Sevilla
IM Tema 1: Introducción a la programación funcional




Tema 1: Introducción a la programación funcional

  1. Funciones


  2. Programación funcional


  3. Rasgos característicos de Haskell


  4. Antecedentes históricos


  5. Presentación de Haskell



                                                      2 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Tema 1: Introducción a la programación funcional

  1. Funciones

  2. Programación funcional

  3. Rasgos característicos de Haskell

  4. Antecedentes históricos

  5. Presentación de Haskell




                                                      3 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Funciones en Haskell
         En Haskell, una función es una aplicación que toma uno o más
         argumentos y devuelve un valor.
         En Haskell, las funciones se definen mediante ecuaciones
         formadas por el nombre de la función, los nombres de los
         argumentos y el cuerpo que especifica cómo se calcula el valor a
         partir de los argumentos.
         Ejemplo de definición de función en Haskell:

         doble x = x + x
         Ejemplo de evaluación:
              doble 3
          = 3+3         [def. de doble]
          = 6           [def. de +]
                                                                           4 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Evaluaciones de funciones en Haskell
         Ejemplo de evaluación anidada impaciente:
              doble (doble 3)
          = doble (3 + 3)       [def. de doble]
          = doble 6             [def. de +]
          = 6+6                 [def. de doble]
          = 12                  [def. de +]
         Ejemplo de evaluación anidada perezosa:
              doble (doble 3)
          = (doble 3) + (doble 3) [def. de doble]
          = (3 +3) + (doble 3)         [def. de doble]
          = 6 + (doble 3)              [def. de +]
          = 6 + (3 + 3)                [def. de doble]
          = 6+6                        [def. de +]
          = 12                         [def. de +]
                                                         5 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Comprobación de propiedades
         Propiedad: El doble de x más y es el doble de x más el doble de y
         Expresión de la propiedad:

         prop_doble x y = doble (x+y) == (doble x) + (doble y)

         Comprobación de la propiedad con QuickCheck:
          *Main> quickCheck prop_doble
          +++ OK, passed 100 tests.
         Para usar QuickCheck hay que importarlo, escribiendo al principio
         del fichero

         import Test.QuickCheck


                                                                             6 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Refutación de propiedades
         Propiedad: El producto de dos números cualequiera es distinto de
         su suma.
         Expresión de la propiedad:

         prop_prod_suma x y = x*y /= x+y

         Refutación de la propiedad con QuickCheck:
          *Main> quickCheck prop_prod_suma
          *** Failed! Falsifiable (after 1 test):
          0
          0




                                                                            7 / 21
IM Tema 1: Introducción a la programación funcional
  Funciones




Refutación de propiedades
         Refinamiento: El producto de dos números no nulos cualequiera
         es distinto de su suma.

         prop_prod_suma' x y =
             x /= 0 && y /= 0 ==> x*y /= x+y

         Refutación de la propiedad con QuickCheck:
          *Main> quickCheck prop_prod_suma'
          +++ OK, passed 100 tests.
          *Main> quickCheck prop_prod_suma'
          *** Failed! Falsifiable (after 5 tests):
          2
          2


                                                                        8 / 21
IM Tema 1: Introducción a la programación funcional
  Programación funcional




Tema 1: Introducción a la programación funcional

  1. Funciones

  2. Programación funcional

  3. Rasgos característicos de Haskell

  4. Antecedentes históricos

  5. Presentación de Haskell




                                                      9 / 21
IM Tema 1: Introducción a la programación funcional
  Programación funcional




Programación funcional y programación imperativa
         La programación funcional es un estilo de programación cuyo
         método básico de computación es la aplicación de funciones a
         sus argumentos.
         Un lenguaje de programación funcional es uno que soporta y
         potencia el estilo funcional.
         La programación imperativa es un estilo de programación en el
         que los programas están formados por instrucciones que
         especifican cómo se ha de calcular el resultado.
         Ejemplo de problema para diferenciar los estilos de programación:
         Sumar los n primeros números.




                                                                             10 / 21
IM Tema 1: Introducción a la programación funcional
  Programación funcional




Solución mediante programación imperativa
         Programa suma n:
           contador := 0
           total := 0
           repetir
             contador := contador + 1
             total := total + contador
           hasta que contador = n
         Evaluación de suma 4:
                                 contador             total
                                    0                   0
                                    1                   1
                                    2                   3
                                    3                   6
                                    4                  10
                                                              11 / 21
IM Tema 1: Introducción a la programación funcional
  Programación funcional




Solución mediante programación funcional
         Programa:

         suma n = sum [1..n]
         Evaluación de suma 4:
              suma 4
          = sum [1..4]                          [def.   de   suma]
          = sum [1, 2, 3, 4]                    [def.   de   [..]]
          = 1+2+3+4                             [def.   de   sum]
          = 10                                  [def.   de   +]




                                                                     12 / 21
IM Tema 1: Introducción a la programación funcional
  Rasgos característicos de Haskell




Tema 1: Introducción a la programación funcional

  1. Funciones

  2. Programación funcional

  3. Rasgos característicos de Haskell

  4. Antecedentes históricos

  5. Presentación de Haskell




                                                      13 / 21
IM Tema 1: Introducción a la programación funcional
  Rasgos característicos de Haskell




Rasgos característicos de Haskell
         Programas concisos.
         Sistema potente de tipos.
         Listas por comprensión.
         Funciones recursivas.
         Funciones de orden superior.
         Razonamiento sobre programas.
         Evaluación perezosa.
         Efectos monádicos.




                                                      14 / 21
IM Tema 1: Introducción a la programación funcional
  Antecedentes históricos




Tema 1: Introducción a la programación funcional

  1. Funciones

  2. Programación funcional

  3. Rasgos característicos de Haskell

  4. Antecedentes históricos

  5. Presentación de Haskell




                                                      15 / 21
IM Tema 1: Introducción a la programación funcional
  Antecedentes históricos




Antecedentes históricos
         1930s: Alonzo Church desarrolla el lambda cálculo (teoría básica
         de los lenguajes funcionales).
         1950s: John McCarthy desarrolla el Lisp (lenguaje funcional con
         asignaciones).
         1960s: Peter Landin desarrolla ISWIN (lenguaje funcional puro).
         1970s: John Backus desarrolla FP (lenguaje funcional con orden
         superior).
         1970s: Robin Milner desarrolla ML (lenguaje funcional con tipos
         polimórficos e inferencia de tipos).
         1980s: David Turner desarrolla Miranda (lenguaje funcional
         perezoso).
         1987: Un comité comienza el desarrollo de Haskell.
         2003: El comité publica el “Haskell Report”.
                                                                            16 / 21
IM Tema 1: Introducción a la programación funcional
  Presentación de Haskell




Tema 1: Introducción a la programación funcional

  1. Funciones

  2. Programación funcional

  3. Rasgos característicos de Haskell

  4. Antecedentes históricos

  5. Presentación de Haskell




                                                      17 / 21
IM Tema 1: Introducción a la programación funcional
  Presentación de Haskell




Ejemplo de recursión sobre listas
         Especificación: (sum xs) es la suma de los elementos de xs.
         Ejemplo: sum [2,3,7] 12
         Definición:

         sum []     = 0
         sum (x:xs) = x + sum xs
         Evaluación:
              sum [2,3,7]
          = 2 + sum [3,7]            [def. de         sum]
          = 2 + (3 + sum [7])        [def. de         sum]
          = 2 + (3 + (7 + sum [])) [def. de           sum]
          = 2 + (3 + (7 + 0))        [def. de         sum]
          = 12                       [def. de         +]
         Tipo de sum: (Num a) => [a] -> a
                                                                      18 / 21
IM Tema 1: Introducción a la programación funcional
  Presentación de Haskell




Ejemplo con listas de comprensión
         Especificación: (ordena xs) es la lista obtenida ordenando xs
         mediante el algoritmo de ordenación rápida.
         Ejemplo:
          ordena [4,6,2,5,3]        [2,3,4,5,6]
          ordena "deacb"            "abcde"
         Definición:

         ordena [] = []
         ordena (x:xs) =
             (ordena menores) ++ [x] ++ (ordena mayores)
             where menores = [a | a <- xs, a <= x]
                   mayores = [b | b <- xs, b > x]

         Tipo de ordena: (Ord a) => [a] -> [a]
                                                                        19 / 21
IM Tema 1: Introducción a la programación funcional
  Presentación de Haskell




Evaluación del ejemplo con listas de comprensión
          ordena [4,6,2,3]
   =      (ordena [2,3]) ++ [4] ++ (ordena [6])                         [def.   ordena]
   =      ((ordena []) ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6])   [def.   ordena]
   =      ([] ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6])            [def.   ordena]
   =      ([2] ++ (ordena [3])) ++ [4] ++ (ordena [6,5])                [def.   ++]
   =      ([2] ++ ((ordena []) ++ [3] ++ [])) ++ [4] ++ (ordena [6])    [def.   ordena]
   =      ([2] ++ ([] ++ [3] ++ [])) ++ [4] ++ (ordena [6])             [def.   ordena]
   =      ([2] ++ [3]) ++ [4] ++ (ordena [6])                           [def.   ++]
   =      [2,3] ++ [4] ++ (ordena [6])                                  [def.   ++]
   =      [2,3,4] ++ (ordena [6])                                       [def.   ++]
   =      [2,3,4] ++ ((ordena []) ++ [6] ++ (ordena []))                [def.   ordena]
   =      [2,3,4] ++ ((ordena []) ++ [6] ++ (ordena []))                [def.   ordena]
   =      [2,3,4] ++ ([] ++ [6] ++ [])                                  [def.   ordena]
   =      [2,3,4,6]                                                     [def.   ++]


                                                                                   20 / 21
IM Tema 1: Introducción a la programación funcional
  Bibliografía




Bibliografía
    1. R. Bird. Introducción a la programación funcional con Haskell.
       Prentice Hall, 2000.
                 Cap. 1: Conceptos fundamentales.
    2. G. Hutton Programming in Haskell. Cambridge University Press,
       2007.
                 Cap. 1: Introduction.
    3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
       O’Reilly, 2008.
                 Cap. 1: Getting Started.
    4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
       con Haskell. Thompson, 2004.
                 Cap. 1: Programación funcional.
    5. S. Thompson. Haskell: The Craft of Functional Programming,
       Second Edition. Addison-Wesley, 1999.
                 Cap. 1: Introducing functional programming.
                                                                         21 / 21

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
PARADIGMA IMPERATIVO
PARADIGMA IMPERATIVOPARADIGMA IMPERATIVO
PARADIGMA IMPERATIVO
 
Paradigmas de la programación
Paradigmas de la programación Paradigmas de la programación
Paradigmas de la programación
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
Vista lógica
Vista lógicaVista lógica
Vista lógica
 
Metodologia del rup
Metodologia del rupMetodologia del rup
Metodologia del rup
 
Diseno de la arquitectura
Diseno de la arquitecturaDiseno de la arquitectura
Diseno de la arquitectura
 
Lenguaje Lisp
Lenguaje LispLenguaje Lisp
Lenguaje Lisp
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
introduccion metododologias de analisis y diseño de software
 introduccion metododologias de analisis y diseño de software introduccion metododologias de analisis y diseño de software
introduccion metododologias de analisis y diseño de software
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASE
 
Metodologia rup
Metodologia rupMetodologia rup
Metodologia rup
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Manual de-usuario-de-enterprise-architect
Manual de-usuario-de-enterprise-architectManual de-usuario-de-enterprise-architect
Manual de-usuario-de-enterprise-architect
 
Cuadro comparativo.
Cuadro comparativo.Cuadro comparativo.
Cuadro comparativo.
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Metodologia prototipado
Metodologia prototipadoMetodologia prototipado
Metodologia prototipado
 
Greenfoot 1
Greenfoot 1Greenfoot 1
Greenfoot 1
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 

Similar a Tema 1: Introducción a la programación funcional.

progFuncional-Slides.pdf
progFuncional-Slides.pdfprogFuncional-Slides.pdf
progFuncional-Slides.pdfPedro Alcantara
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacionBETTYLLANOS
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Gino Pannillo
 
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)Nerys Ramírez Mordán
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellJosé A. Alonso
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programaciónfpcanizaresg
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónEdison López Díaz
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
 
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Marco Antonio Ordoñez Valverde
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellJosé A. Alonso
 
fundamentos y elementos de programación básicos
fundamentos y elementos  de programación básicosfundamentos y elementos  de programación básicos
fundamentos y elementos de programación básicosmartha449484
 

Similar a Tema 1: Introducción a la programación funcional. (20)

tema-1.pptx
tema-1.pptxtema-1.pptx
tema-1.pptx
 
progFuncional-Slides.pdf
progFuncional-Slides.pdfprogFuncional-Slides.pdf
progFuncional-Slides.pdf
 
Haskell
HaskellHaskell
Haskell
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacion
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)
 
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell
 
Haskell - Intro
Haskell - IntroHaskell - Intro
Haskell - Intro
 
Introduccion a la programación
Introduccion a la programaciónIntroduccion a la programación
Introduccion a la programación
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
Semana 02 software libre maxima
Semana 02 software libre maximaSemana 02 software libre maxima
Semana 02 software libre maxima
 
Tema6
Tema6Tema6
Tema6
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Introducción Programación
Introducción ProgramaciónIntroducción Programación
Introducción Programación
 
Tema6.ppt
Tema6.pptTema6.ppt
Tema6.ppt
 
fundamentos y elementos de programación básicos
fundamentos y elementos  de programación básicosfundamentos y elementos  de programación básicos
fundamentos y elementos de programación básicos
 
Tema6
Tema6Tema6
Tema6
 

Más de José A. Alonso

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosJosé A. Alonso
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaJosé A. Alonso
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosJosé A. Alonso
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 

Más de José A. Alonso (20)

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmos
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsqueda
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 

Último

Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalPPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalRosarioChoque3
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...GIANCARLOORDINOLAORD
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectosTrishGutirrez
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.profandrearivero
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdfEDNAMONICARUIZNIETO
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfJosé Hecht
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfmiriamguevara21
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOEveliaHernandez8
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)jlorentemartos
 

Último (20)

Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbalPPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
PPT_ Prefijo homo tema para trabajar los prefijos en razonamiento verbal
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdf
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
 

Tema 1: Introducción a la programación funcional.

  • 1. Tema 1: Introducción a la programación funcional Informática (2010–11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
  • 2. IM Tema 1: Introducción a la programación funcional Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 2 / 21
  • 3. IM Tema 1: Introducción a la programación funcional Funciones Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 3 / 21
  • 4. IM Tema 1: Introducción a la programación funcional Funciones Funciones en Haskell En Haskell, una función es una aplicación que toma uno o más argumentos y devuelve un valor. En Haskell, las funciones se definen mediante ecuaciones formadas por el nombre de la función, los nombres de los argumentos y el cuerpo que especifica cómo se calcula el valor a partir de los argumentos. Ejemplo de definición de función en Haskell: doble x = x + x Ejemplo de evaluación: doble 3 = 3+3 [def. de doble] = 6 [def. de +] 4 / 21
  • 5. IM Tema 1: Introducción a la programación funcional Funciones Evaluaciones de funciones en Haskell Ejemplo de evaluación anidada impaciente: doble (doble 3) = doble (3 + 3) [def. de doble] = doble 6 [def. de +] = 6+6 [def. de doble] = 12 [def. de +] Ejemplo de evaluación anidada perezosa: doble (doble 3) = (doble 3) + (doble 3) [def. de doble] = (3 +3) + (doble 3) [def. de doble] = 6 + (doble 3) [def. de +] = 6 + (3 + 3) [def. de doble] = 6+6 [def. de +] = 12 [def. de +] 5 / 21
  • 6. IM Tema 1: Introducción a la programación funcional Funciones Comprobación de propiedades Propiedad: El doble de x más y es el doble de x más el doble de y Expresión de la propiedad: prop_doble x y = doble (x+y) == (doble x) + (doble y) Comprobación de la propiedad con QuickCheck: *Main> quickCheck prop_doble +++ OK, passed 100 tests. Para usar QuickCheck hay que importarlo, escribiendo al principio del fichero import Test.QuickCheck 6 / 21
  • 7. IM Tema 1: Introducción a la programación funcional Funciones Refutación de propiedades Propiedad: El producto de dos números cualequiera es distinto de su suma. Expresión de la propiedad: prop_prod_suma x y = x*y /= x+y Refutación de la propiedad con QuickCheck: *Main> quickCheck prop_prod_suma *** Failed! Falsifiable (after 1 test): 0 0 7 / 21
  • 8. IM Tema 1: Introducción a la programación funcional Funciones Refutación de propiedades Refinamiento: El producto de dos números no nulos cualequiera es distinto de su suma. prop_prod_suma' x y = x /= 0 && y /= 0 ==> x*y /= x+y Refutación de la propiedad con QuickCheck: *Main> quickCheck prop_prod_suma' +++ OK, passed 100 tests. *Main> quickCheck prop_prod_suma' *** Failed! Falsifiable (after 5 tests): 2 2 8 / 21
  • 9. IM Tema 1: Introducción a la programación funcional Programación funcional Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 9 / 21
  • 10. IM Tema 1: Introducción a la programación funcional Programación funcional Programación funcional y programación imperativa La programación funcional es un estilo de programación cuyo método básico de computación es la aplicación de funciones a sus argumentos. Un lenguaje de programación funcional es uno que soporta y potencia el estilo funcional. La programación imperativa es un estilo de programación en el que los programas están formados por instrucciones que especifican cómo se ha de calcular el resultado. Ejemplo de problema para diferenciar los estilos de programación: Sumar los n primeros números. 10 / 21
  • 11. IM Tema 1: Introducción a la programación funcional Programación funcional Solución mediante programación imperativa Programa suma n: contador := 0 total := 0 repetir contador := contador + 1 total := total + contador hasta que contador = n Evaluación de suma 4: contador total 0 0 1 1 2 3 3 6 4 10 11 / 21
  • 12. IM Tema 1: Introducción a la programación funcional Programación funcional Solución mediante programación funcional Programa: suma n = sum [1..n] Evaluación de suma 4: suma 4 = sum [1..4] [def. de suma] = sum [1, 2, 3, 4] [def. de [..]] = 1+2+3+4 [def. de sum] = 10 [def. de +] 12 / 21
  • 13. IM Tema 1: Introducción a la programación funcional Rasgos característicos de Haskell Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 13 / 21
  • 14. IM Tema 1: Introducción a la programación funcional Rasgos característicos de Haskell Rasgos característicos de Haskell Programas concisos. Sistema potente de tipos. Listas por comprensión. Funciones recursivas. Funciones de orden superior. Razonamiento sobre programas. Evaluación perezosa. Efectos monádicos. 14 / 21
  • 15. IM Tema 1: Introducción a la programación funcional Antecedentes históricos Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 15 / 21
  • 16. IM Tema 1: Introducción a la programación funcional Antecedentes históricos Antecedentes históricos 1930s: Alonzo Church desarrolla el lambda cálculo (teoría básica de los lenguajes funcionales). 1950s: John McCarthy desarrolla el Lisp (lenguaje funcional con asignaciones). 1960s: Peter Landin desarrolla ISWIN (lenguaje funcional puro). 1970s: John Backus desarrolla FP (lenguaje funcional con orden superior). 1970s: Robin Milner desarrolla ML (lenguaje funcional con tipos polimórficos e inferencia de tipos). 1980s: David Turner desarrolla Miranda (lenguaje funcional perezoso). 1987: Un comité comienza el desarrollo de Haskell. 2003: El comité publica el “Haskell Report”. 16 / 21
  • 17. IM Tema 1: Introducción a la programación funcional Presentación de Haskell Tema 1: Introducción a la programación funcional 1. Funciones 2. Programación funcional 3. Rasgos característicos de Haskell 4. Antecedentes históricos 5. Presentación de Haskell 17 / 21
  • 18. IM Tema 1: Introducción a la programación funcional Presentación de Haskell Ejemplo de recursión sobre listas Especificación: (sum xs) es la suma de los elementos de xs. Ejemplo: sum [2,3,7] 12 Definición: sum [] = 0 sum (x:xs) = x + sum xs Evaluación: sum [2,3,7] = 2 + sum [3,7] [def. de sum] = 2 + (3 + sum [7]) [def. de sum] = 2 + (3 + (7 + sum [])) [def. de sum] = 2 + (3 + (7 + 0)) [def. de sum] = 12 [def. de +] Tipo de sum: (Num a) => [a] -> a 18 / 21
  • 19. IM Tema 1: Introducción a la programación funcional Presentación de Haskell Ejemplo con listas de comprensión Especificación: (ordena xs) es la lista obtenida ordenando xs mediante el algoritmo de ordenación rápida. Ejemplo: ordena [4,6,2,5,3] [2,3,4,5,6] ordena "deacb" "abcde" Definición: ordena [] = [] ordena (x:xs) = (ordena menores) ++ [x] ++ (ordena mayores) where menores = [a | a <- xs, a <= x] mayores = [b | b <- xs, b > x] Tipo de ordena: (Ord a) => [a] -> [a] 19 / 21
  • 20. IM Tema 1: Introducción a la programación funcional Presentación de Haskell Evaluación del ejemplo con listas de comprensión ordena [4,6,2,3] = (ordena [2,3]) ++ [4] ++ (ordena [6]) [def. ordena] = ((ordena []) ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6]) [def. ordena] = ([] ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6]) [def. ordena] = ([2] ++ (ordena [3])) ++ [4] ++ (ordena [6,5]) [def. ++] = ([2] ++ ((ordena []) ++ [3] ++ [])) ++ [4] ++ (ordena [6]) [def. ordena] = ([2] ++ ([] ++ [3] ++ [])) ++ [4] ++ (ordena [6]) [def. ordena] = ([2] ++ [3]) ++ [4] ++ (ordena [6]) [def. ++] = [2,3] ++ [4] ++ (ordena [6]) [def. ++] = [2,3,4] ++ (ordena [6]) [def. ++] = [2,3,4] ++ ((ordena []) ++ [6] ++ (ordena [])) [def. ordena] = [2,3,4] ++ ((ordena []) ++ [6] ++ (ordena [])) [def. ordena] = [2,3,4] ++ ([] ++ [6] ++ []) [def. ordena] = [2,3,4,6] [def. ++] 20 / 21
  • 21. IM Tema 1: Introducción a la programación funcional Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. Cap. 1: Conceptos fundamentales. 2. G. Hutton Programming in Haskell. Cambridge University Press, 2007. Cap. 1: Introduction. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. Cap. 1: Getting Started. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. Cap. 1: Programación funcional. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. Cap. 1: Introducing functional programming. 21 / 21