SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Tema 10: Evaluación perezosa
          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 10: Evaluación perezosa




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  2 / 27
IM Tema 10: Evaluación perezosa
  Estrategias de evaluación




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  3 / 27
IM Tema 10: Evaluación perezosa
  Estrategias de evaluación




Estrategias de evaluación
         Para los ejemplos se considera la función

         mult :: (Int,Int) -> Int
         mult (x,y) = x*y
         Evaluación mediante paso de parámetros por valor (o por más
         internos):
               mult (1+2,2+3)
           = mult (3,5)         [por def. de +]
           = 3*5                [por def. de mult]
           = 15                 [por def. de *]
         Evaluación mediante paso de parámetros por nombre (o por más
         externos):
               mult (1+2,2+3)
           = (1+2)*(3+5)        [por def. de mult]
           = 3*5                [por def. de +]                         4 / 27
IM Tema 10: Evaluación perezosa
  Estrategias de evaluación




Evaluación con lambda expresiones
         Se considera la función

         mult' :: Int -> Int -> Int
         mult' x = y -> x*y

         Evaluación:
              mult’ (1+2) (2+3)
          = mult’ 3 (2+3)          [por   def.   de   +]
          = (λy → 3*y) (2+3)       [por   def.   de   mult’]
          = (λy → 3*y) 5           [por   def.   de   +]
          = 3*5                    [por   def.   de   +]
          = 15                     [por   def.   de   *]



                                                               5 / 27
IM Tema 10: Evaluación perezosa
  Terminación




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  6 / 27
IM Tema 10: Evaluación perezosa
  Terminación




Procesamiento con el infinito
         Definición de infinito

         inf :: Int
         inf = 1 + inf
         Evaluación de infinito en Haskell:
          *Main> inf
            C-c C-cInterrupted.
         Evaluación de infinito:
              inf
          = 1 + inf                  [por def. inf]
          = 1 + (1 + inf)            [por def. inf]
          = 1 + (1 + (1 + inf))      [por def. inf]
          = ...
                                                      7 / 27
IM Tema 10: Evaluación perezosa
  Terminación




Procesamiento con el infinito
         Evaluación mediante paso de parámetros por valor:
              fst (0,inf)
          = fst (0,1 + inf)               [por def. inf]
          = fst (0,1 + (1 + inf))         [por def. inf]
          = fst (0,1 + (1 + (1 + inf))) [por def. inf]
          = ...
         Evaluación mediante paso de parámetros por nombre:
              fst (0,inf)
          = 0             [por def. fst]
         Evaluación Haskell con infinito:
          *Main> fst (0,inf)
          0


                                                              8 / 27
IM Tema 10: Evaluación perezosa
  Número de reducciones




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  9 / 27
IM Tema 10: Evaluación perezosa
  Número de reducciones




Número de reducciones según las estrategias
         Para los ejemplos se considera la función

         cuadrado :: Int -> Int
         cuadrado n = n * n
         Evaluación mediante paso de parámetros por valor:
              cuadrado (1+2)
          = cuadrado 3          [por def. +]
          = 3*3                 [por def. cuadrado]
          = 9                   [por def. de *]
         Evaluación mediante paso de parámetros por nombre:
              cuadrado (1+2)
          = (1+2)*(1+2)         [por def. cuadrado]
          = 3*(1+2)             [por def. de +]
          = 3*3                 [por def. de +]
          = 9                   [por def. de *]               10 / 27
IM Tema 10: Evaluación perezosa
  Número de reducciones




Evaluación perezosa e impaciente
         En la evaluación mediante paso de parámetros por nombre los
         argumentos pueden evaluarse más veces que en el paso por valor.
         Se puede usar punteros para compartir valores de expresiones.
         La evaluación mediante paso de parámetros por nombre usando
         punteros para compartir valores de expresiones se llama
         evaluación perezosa.
         La evaluación mediante paso de parámetros por valor se llama
         evaluación impaciente.
         Evaluación perezosa del ejemplo anterior:
               cuadrado (1+2)
          = x*x con x = 1+2 [por def. cuadrado]
          = 3*3                   [por def. de +]
          = 9                     [por def. de *]
         Haskell usa evaluación perezosa.
                                                                           11 / 27
IM Tema 10: Evaluación perezosa
  Estructuras infinitas




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  12 / 27
IM Tema 10: Evaluación perezosa
  Estructuras infinitas




Programación con estructuras infinitas
         unos es una lista infinita de unos.

         unos :: [Int]
         unos = 1 : unos
         Evaluación:
              unos
          = 1 : unos             [por def. unos]
          = 1 : (1 : unos)       [por def. unos]
          = 1 : (1 : (1 : unos)) [por def. unos]
          = ...
         Evaluación en Haskell:
          *Main> unos
          [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...
                                                               13 / 27
IM Tema 10: Evaluación perezosa
  Estructuras infinitas




Evaluación con estructuras infinitas
         Evaluación impaciente:
              head unos
          = head (1 : unos)                  [por def. unos]
          = head (1 : (1 : unos))            [por def. unos]
          = head (1 : (1 : (1 : unos)))      [por def. unos]
          = ...
         Evaluación perezosa:
              head unos
          = head (1 : unos) [por def.       unos]
          = 1                   [por def.   head]
         Evaluación Haskell:
          *Main> head unos
          1

                                                               14 / 27
IM Tema 10: Evaluación perezosa
  Programación modular




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  15 / 27
IM Tema 10: Evaluación perezosa
  Programación modular




Programación modular
        La evaluación perezosa permite separar el control de los datos.
        Para los ejemplos se considera la función
                                         Prelude
        take :: Int -> [a] -> [a]
        take n _ | n <= 0 = []
        take _ []               = []
        take n (x:xs)           = x : take (n-1) xs

        Ejemplo de separación del control (tomar 2 elementos) de los datos (una
        lista infinita de unos):
               take 2 unos
          = take 2 (1 : unos)        [por def. unos]
          = 1 : (take 1 unos)        [por def. take]
          = 1 : (take 1 (1 : unos)) [por def. unos]
          = 1 : (1 : (take 0 unos)) [por def. take]
          = 1 : (1 : [])             [por def. take]
          = [1,1]                    [por notación de listas]
                                                                                  16 / 27
IM Tema 10: Evaluación perezosa
  Programación modular




Terminación de evaluaciones con estructuras infinitas
         Ejemplo de no terminación:
          *Main> [1..]
          [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,...
         Ejemplo de terminación:
          *Main> take 3 [1..]
          [1,2,3]
         Ejemplo de no terminación:
          *Main> filter (<=3) [1..]
          [1,2,3 C-c C-c Interrupted.
         Ejemplo de no terminación:
          *Main> takeWhile (<=3) [1..]
          [1,2,3]

                                                               17 / 27
IM Tema 10: Evaluación perezosa
  Programación modular




La criba de Erastótenes
         La criba de Erastótenes
          2 3 4 5 6 7 8            9   10   11   12   13   14   15   ...
              3       5      7     9        11        13        15   ...
                      5      7              11        13             ...
                             7              11        13             ...
                                            11        13             ...
                                                      13             ...
         Definición

         primos :: [Int ]
         primos = criba [2..]

         criba :: [Int] -> [Int]
         criba (p:xs) = p : criba [x | x <- xs, x `mod` p /= 0]
                                                                           18 / 27
IM Tema 10: Evaluación perezosa
  Programación modular




La criba de Erastótenes
        Evaluación:
         take 15 primos    [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47]
        Cálculo:
          primos
        = criba [2..]
        = criba (2 : [3..])
        = 2 : (criba [x | x <- [3..], x `mod` 2 /= 0])
        = 2 : (criba (3 : [x | x <- [4..], x `mod` 2 /= 0]))
        = 2 : 3 : (criba [x | x <- [4..], x `mod` 2 /= 0,
                                          x `mod` 3 /= 0])
        = 2 : 3 : (criba (5 : [x | x <- [6..], x `mod` 2 /= 0,
                                               x `mod` 3 /= 0]))
        = 2 : 3 : 5 : (criba ([x | x <- [6..], x `mod` 2 /= 0,
                                               x `mod` 3 /= 0,
                                               x `mod` 5 /= 0]))
        = ...
                                                                        19 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Tema 10: Evaluación perezosa

 1. Estrategias de evaluación

 2. Terminación

 3. Número de reducciones

 4. Estructuras infinitas

 5. Programación modular

 6. Aplicación estricta


                                  20 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Ejemplo de programa sin aplicación estricta
         (sumaNE xs) es la suma de los números de xs. Por ejemplo,
          sumaNE [2,3,5]        10

         sumaNE :: [Int] -> Int
         sumaNE xs = sumaNE' 0 xs

         sumaNE' :: Int -> [Int] -> Int
         sumaNE' v []     = v
         sumaNE' v (x:xs) = sumaNE' (v+x) xs




                                                                     21 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Ejemplo de programa sin aplicación estricta
         Evaluación: :
              sumaNE [2,3,5]
          = sumaNE’ 0 [2,3,5]          [por   def.   sumaNE]
          = sumaNE’ (0+2) [3,5]        [por   def.   sumaNE’]
          = sumaNE’ ((0+2)+3) [5]      [por   def.   sumaNE’]
          = sumaNE’ (((0+2)+3)+5) []   [por   def.   sumaNE’]
          = ((0+2)+3)+5                [por   def.   sumaNE’]
          = (2+3)+5                    [por   def.   +]
          = 5+5                        [por   def.   +]
          = 10                         [por   def.   +]




                                                                22 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Ejemplo de programa con aplicación estricta
         (sumaE xs) es la suma de los números de xs. Por ejemplo,
          sumaE [2,3,5]        10

         sumaE :: [Int] -> Int
         sumaE xs = sumaE' 0 xs

         sumaE' :: Int -> [Int] -> Int
         sumaE' v []     = v
         sumaE' v (x:xs) = (sumaE' $! (v+x)) xs




                                                                    23 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Ejemplo de programa con aplicación estricta
         Evaluación: :
              sumaE [2,3,5]
          = sumaE’ 0 [2,3,5]          [por   def. sumaE]
          = (sumaE’ $! (0+2)) [3,5]   [por   def. sumaE’]
          = sumaE’ 2 [3,5]            [por   aplicación de $!]
          = (sumaE’ $! (2+3)) [5]     [por   def. sumaE’]
          = sumaE’ 5 [5]              [por   aplicación de $!]
          = (sumaE’ $! (5+5)) []      [por   def. sumaE’]
          = sumaE’ 10 []              [por   aplicación de $!]
          = 10                        [por   def. sumaE’]




                                                                 24 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Comparación de consumo de memoria
         Comparación de consumo de memoria:
          *Main> sumaNE [1..1000000]
          *** Exception: stack overflow
          *Main> sumaE [1..1000000]
          1784293664
          *Main> :set +s
          *Main> sumaE [1..1000000]
          1784293664
          (2.16 secs, 145435772 bytes)




                                              25 / 27
IM Tema 10: Evaluación perezosa
  Aplicación estricta




Plegado estricto
         Versión estricta de foldl en el Data.List

         foldl' :: (a -> b -> a) -> a -> [b] -> a
         foldl' f a []     = a
         foldl' f a (x:xs) = (foldl' f $! f a x) xs
         Comparación de plegado y plegado estricto:s
          *Main> foldl (+) 0 [2,3,5]
          10
          *Main> foldl' (+) 0 [2,3,5]
          10
          *Main> foldl (+) 0 [1..1000000]
          *** Exception: stack overflow
          *Main> foldl' (+) 0 [1..1000000]
          500000500000
                                                       26 / 27
IM Tema 10: Evaluación perezosa
  Bibliografía




Bibliografía
    1. R. Bird. Introducción a la programación funcional con Haskell.
       Prentice Hall, 2000.
                 Cap. Cap. 7: Eficiencia.
    2. G. Hutton Programming in Haskell. Cambridge University Press,
       2007.
                 Cap. 12: Lazy evaluation.
    3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
       O’Reilly, 2008.
                 Cap. 2: Types and Functions.
    4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
       con Haskell. Thompson, 2004.
                 Cap. 2: Introducción a Haskell.
                 Cap. 8: Evaluación perezosa. Redes de procesos.
    5. S. Thompson. Haskell: The Craft of Functional Programming,
       Second Edition. Addison-Wesley, 1999.
                 Cap. 17: Lazy programming.
                                                                         27 / 27

Más contenido relacionado

La actualidad más candente

Tipos de Requerimientos en Ingeniería de Software
Tipos de Requerimientos en Ingeniería de SoftwareTipos de Requerimientos en Ingeniería de Software
Tipos de Requerimientos en Ingeniería de SoftwareLeo Ruelas Rojas
 
Requerimientos no funcionales
Requerimientos no funcionalesRequerimientos no funcionales
Requerimientos no funcionalesAngel Minga
 
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebTensor
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS Infomania pro
 
Analisis y determinacion de requerimientos
Analisis y determinacion de requerimientosAnalisis y determinacion de requerimientos
Analisis y determinacion de requerimientosYesith Valencia
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blancaStudentPc
 
Diseño & Procesamiento de transacciones
Diseño & Procesamiento de transaccionesDiseño & Procesamiento de transacciones
Diseño & Procesamiento de transaccionesBlanca Parra
 
Bitácora de base de datos
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datosLalo Osorio
 
Técnicas y herramientas para el desarrollo de Software
Técnicas y herramientas para el desarrollo de SoftwareTécnicas y herramientas para el desarrollo de Software
Técnicas y herramientas para el desarrollo de SoftwareOcma' Xdd
 
Listas en prolog
Listas en prologListas en prolog
Listas en prologJeffoG92
 

La actualidad más candente (20)

Diagrama de Componentes
Diagrama de ComponentesDiagrama de Componentes
Diagrama de Componentes
 
Tipos de Requerimientos en Ingeniería de Software
Tipos de Requerimientos en Ingeniería de SoftwareTipos de Requerimientos en Ingeniería de Software
Tipos de Requerimientos en Ingeniería de Software
 
Requerimientos no funcionales
Requerimientos no funcionalesRequerimientos no funcionales
Requerimientos no funcionales
 
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la Web
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 
Analisis y determinacion de requerimientos
Analisis y determinacion de requerimientosAnalisis y determinacion de requerimientos
Analisis y determinacion de requerimientos
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Seguridad sql server
Seguridad sql serverSeguridad sql server
Seguridad sql server
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blanca
 
6 Curso de POO en Java - clases y objetos
6  Curso de POO en Java - clases y objetos6  Curso de POO en Java - clases y objetos
6 Curso de POO en Java - clases y objetos
 
Requerimientos del software
Requerimientos del software Requerimientos del software
Requerimientos del software
 
Diseño & Procesamiento de transacciones
Diseño & Procesamiento de transaccionesDiseño & Procesamiento de transacciones
Diseño & Procesamiento de transacciones
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Unidad1 Lenguajes y automatas
Unidad1 Lenguajes y automatasUnidad1 Lenguajes y automatas
Unidad1 Lenguajes y automatas
 
Bitácora de base de datos
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datos
 
Técnicas y herramientas para el desarrollo de Software
Técnicas y herramientas para el desarrollo de SoftwareTécnicas y herramientas para el desarrollo de Software
Técnicas y herramientas para el desarrollo de Software
 
Ieee 830
Ieee 830Ieee 830
Ieee 830
 
Listas en prolog
Listas en prologListas en prolog
Listas en prolog
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 

Similar a Tema 10: Evaluación perezosa en Haskell

Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell José A. Alonso
 
Lógica de la programación
Lógica de la programaciónLógica de la programación
Lógica de la programaciónUTPL UTPL
 
Matlab basico
Matlab basicoMatlab basico
Matlab basicoford81
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.José A. Alonso
 
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
 
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
 
Factorial again! Olimpiada Informática Media IOI- ACM
Factorial again! Olimpiada  Informática Media IOI- ACMFactorial again! Olimpiada  Informática Media IOI- ACM
Factorial again! Olimpiada Informática Media IOI- ACMVictor Aravena
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018ead1943
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
2 _expresiones_matematicas_254209
2  _expresiones_matematicas_2542092  _expresiones_matematicas_254209
2 _expresiones_matematicas_254209Miguel Medina
 
Estimacion de Proyectos, Ingeniería de Software
Estimacion de Proyectos, Ingeniería de SoftwareEstimacion de Proyectos, Ingeniería de Software
Estimacion de Proyectos, Ingeniería de SoftwareMarvin Romero
 

Similar a Tema 10: Evaluación perezosa en Haskell (20)

Tema 10-1x2
Tema 10-1x2Tema 10-1x2
Tema 10-1x2
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Conceptos básicos de R
Conceptos básicos de RConceptos básicos de R
Conceptos básicos de R
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell
 
Tema3
Tema3Tema3
Tema3
 
Lógica de la programación
Lógica de la programaciónLógica de la programación
Lógica de la programación
 
Matlab basico
Matlab basicoMatlab basico
Matlab basico
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.
 
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
 
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
 
Factorial again! Olimpiada Informática Media IOI- ACM
Factorial again! Olimpiada  Informática Media IOI- ACMFactorial again! Olimpiada  Informática Media IOI- ACM
Factorial again! Olimpiada Informática Media IOI- ACM
 
Pf con scala
Pf con scalaPf con scala
Pf con scala
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
123507620 que-es-la-evaluacion-perezosa-docx
123507620 que-es-la-evaluacion-perezosa-docx123507620 que-es-la-evaluacion-perezosa-docx
123507620 que-es-la-evaluacion-perezosa-docx
 
2 _expresiones_matematicas_254209
2  _expresiones_matematicas_2542092  _expresiones_matematicas_254209
2 _expresiones_matematicas_254209
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Parte2
Parte2Parte2
Parte2
 
Estimacion de Proyectos, Ingeniería de Software
Estimacion de Proyectos, Ingeniería de SoftwareEstimacion de Proyectos, Ingeniería de Software
Estimacion de Proyectos, Ingeniería de Software
 
Tema3
Tema3Tema3
Tema3
 

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

cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicaFlor Idalia Espinoza Ortega
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 

Último (20)

cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamica
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 

Tema 10: Evaluación perezosa en Haskell

  • 1. Tema 10: Evaluación perezosa 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 10: Evaluación perezosa Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 2 / 27
  • 3. IM Tema 10: Evaluación perezosa Estrategias de evaluación Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 3 / 27
  • 4. IM Tema 10: Evaluación perezosa Estrategias de evaluación Estrategias de evaluación Para los ejemplos se considera la función mult :: (Int,Int) -> Int mult (x,y) = x*y Evaluación mediante paso de parámetros por valor (o por más internos): mult (1+2,2+3) = mult (3,5) [por def. de +] = 3*5 [por def. de mult] = 15 [por def. de *] Evaluación mediante paso de parámetros por nombre (o por más externos): mult (1+2,2+3) = (1+2)*(3+5) [por def. de mult] = 3*5 [por def. de +] 4 / 27
  • 5. IM Tema 10: Evaluación perezosa Estrategias de evaluación Evaluación con lambda expresiones Se considera la función mult' :: Int -> Int -> Int mult' x = y -> x*y Evaluación: mult’ (1+2) (2+3) = mult’ 3 (2+3) [por def. de +] = (λy → 3*y) (2+3) [por def. de mult’] = (λy → 3*y) 5 [por def. de +] = 3*5 [por def. de +] = 15 [por def. de *] 5 / 27
  • 6. IM Tema 10: Evaluación perezosa Terminación Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 6 / 27
  • 7. IM Tema 10: Evaluación perezosa Terminación Procesamiento con el infinito Definición de infinito inf :: Int inf = 1 + inf Evaluación de infinito en Haskell: *Main> inf C-c C-cInterrupted. Evaluación de infinito: inf = 1 + inf [por def. inf] = 1 + (1 + inf) [por def. inf] = 1 + (1 + (1 + inf)) [por def. inf] = ... 7 / 27
  • 8. IM Tema 10: Evaluación perezosa Terminación Procesamiento con el infinito Evaluación mediante paso de parámetros por valor: fst (0,inf) = fst (0,1 + inf) [por def. inf] = fst (0,1 + (1 + inf)) [por def. inf] = fst (0,1 + (1 + (1 + inf))) [por def. inf] = ... Evaluación mediante paso de parámetros por nombre: fst (0,inf) = 0 [por def. fst] Evaluación Haskell con infinito: *Main> fst (0,inf) 0 8 / 27
  • 9. IM Tema 10: Evaluación perezosa Número de reducciones Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 9 / 27
  • 10. IM Tema 10: Evaluación perezosa Número de reducciones Número de reducciones según las estrategias Para los ejemplos se considera la función cuadrado :: Int -> Int cuadrado n = n * n Evaluación mediante paso de parámetros por valor: cuadrado (1+2) = cuadrado 3 [por def. +] = 3*3 [por def. cuadrado] = 9 [por def. de *] Evaluación mediante paso de parámetros por nombre: cuadrado (1+2) = (1+2)*(1+2) [por def. cuadrado] = 3*(1+2) [por def. de +] = 3*3 [por def. de +] = 9 [por def. de *] 10 / 27
  • 11. IM Tema 10: Evaluación perezosa Número de reducciones Evaluación perezosa e impaciente En la evaluación mediante paso de parámetros por nombre los argumentos pueden evaluarse más veces que en el paso por valor. Se puede usar punteros para compartir valores de expresiones. La evaluación mediante paso de parámetros por nombre usando punteros para compartir valores de expresiones se llama evaluación perezosa. La evaluación mediante paso de parámetros por valor se llama evaluación impaciente. Evaluación perezosa del ejemplo anterior: cuadrado (1+2) = x*x con x = 1+2 [por def. cuadrado] = 3*3 [por def. de +] = 9 [por def. de *] Haskell usa evaluación perezosa. 11 / 27
  • 12. IM Tema 10: Evaluación perezosa Estructuras infinitas Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 12 / 27
  • 13. IM Tema 10: Evaluación perezosa Estructuras infinitas Programación con estructuras infinitas unos es una lista infinita de unos. unos :: [Int] unos = 1 : unos Evaluación: unos = 1 : unos [por def. unos] = 1 : (1 : unos) [por def. unos] = 1 : (1 : (1 : unos)) [por def. unos] = ... Evaluación en Haskell: *Main> unos [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... 13 / 27
  • 14. IM Tema 10: Evaluación perezosa Estructuras infinitas Evaluación con estructuras infinitas Evaluación impaciente: head unos = head (1 : unos) [por def. unos] = head (1 : (1 : unos)) [por def. unos] = head (1 : (1 : (1 : unos))) [por def. unos] = ... Evaluación perezosa: head unos = head (1 : unos) [por def. unos] = 1 [por def. head] Evaluación Haskell: *Main> head unos 1 14 / 27
  • 15. IM Tema 10: Evaluación perezosa Programación modular Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 15 / 27
  • 16. IM Tema 10: Evaluación perezosa Programación modular Programación modular La evaluación perezosa permite separar el control de los datos. Para los ejemplos se considera la función Prelude take :: Int -> [a] -> [a] take n _ | n <= 0 = [] take _ [] = [] take n (x:xs) = x : take (n-1) xs Ejemplo de separación del control (tomar 2 elementos) de los datos (una lista infinita de unos): take 2 unos = take 2 (1 : unos) [por def. unos] = 1 : (take 1 unos) [por def. take] = 1 : (take 1 (1 : unos)) [por def. unos] = 1 : (1 : (take 0 unos)) [por def. take] = 1 : (1 : []) [por def. take] = [1,1] [por notación de listas] 16 / 27
  • 17. IM Tema 10: Evaluación perezosa Programación modular Terminación de evaluaciones con estructuras infinitas Ejemplo de no terminación: *Main> [1..] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,... Ejemplo de terminación: *Main> take 3 [1..] [1,2,3] Ejemplo de no terminación: *Main> filter (<=3) [1..] [1,2,3 C-c C-c Interrupted. Ejemplo de no terminación: *Main> takeWhile (<=3) [1..] [1,2,3] 17 / 27
  • 18. IM Tema 10: Evaluación perezosa Programación modular La criba de Erastótenes La criba de Erastótenes 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 3 5 7 9 11 13 15 ... 5 7 11 13 ... 7 11 13 ... 11 13 ... 13 ... Definición primos :: [Int ] primos = criba [2..] criba :: [Int] -> [Int] criba (p:xs) = p : criba [x | x <- xs, x `mod` p /= 0] 18 / 27
  • 19. IM Tema 10: Evaluación perezosa Programación modular La criba de Erastótenes Evaluación: take 15 primos [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47] Cálculo: primos = criba [2..] = criba (2 : [3..]) = 2 : (criba [x | x <- [3..], x `mod` 2 /= 0]) = 2 : (criba (3 : [x | x <- [4..], x `mod` 2 /= 0])) = 2 : 3 : (criba [x | x <- [4..], x `mod` 2 /= 0, x `mod` 3 /= 0]) = 2 : 3 : (criba (5 : [x | x <- [6..], x `mod` 2 /= 0, x `mod` 3 /= 0])) = 2 : 3 : 5 : (criba ([x | x <- [6..], x `mod` 2 /= 0, x `mod` 3 /= 0, x `mod` 5 /= 0])) = ... 19 / 27
  • 20. IM Tema 10: Evaluación perezosa Aplicación estricta Tema 10: Evaluación perezosa 1. Estrategias de evaluación 2. Terminación 3. Número de reducciones 4. Estructuras infinitas 5. Programación modular 6. Aplicación estricta 20 / 27
  • 21. IM Tema 10: Evaluación perezosa Aplicación estricta Ejemplo de programa sin aplicación estricta (sumaNE xs) es la suma de los números de xs. Por ejemplo, sumaNE [2,3,5] 10 sumaNE :: [Int] -> Int sumaNE xs = sumaNE' 0 xs sumaNE' :: Int -> [Int] -> Int sumaNE' v [] = v sumaNE' v (x:xs) = sumaNE' (v+x) xs 21 / 27
  • 22. IM Tema 10: Evaluación perezosa Aplicación estricta Ejemplo de programa sin aplicación estricta Evaluación: : sumaNE [2,3,5] = sumaNE’ 0 [2,3,5] [por def. sumaNE] = sumaNE’ (0+2) [3,5] [por def. sumaNE’] = sumaNE’ ((0+2)+3) [5] [por def. sumaNE’] = sumaNE’ (((0+2)+3)+5) [] [por def. sumaNE’] = ((0+2)+3)+5 [por def. sumaNE’] = (2+3)+5 [por def. +] = 5+5 [por def. +] = 10 [por def. +] 22 / 27
  • 23. IM Tema 10: Evaluación perezosa Aplicación estricta Ejemplo de programa con aplicación estricta (sumaE xs) es la suma de los números de xs. Por ejemplo, sumaE [2,3,5] 10 sumaE :: [Int] -> Int sumaE xs = sumaE' 0 xs sumaE' :: Int -> [Int] -> Int sumaE' v [] = v sumaE' v (x:xs) = (sumaE' $! (v+x)) xs 23 / 27
  • 24. IM Tema 10: Evaluación perezosa Aplicación estricta Ejemplo de programa con aplicación estricta Evaluación: : sumaE [2,3,5] = sumaE’ 0 [2,3,5] [por def. sumaE] = (sumaE’ $! (0+2)) [3,5] [por def. sumaE’] = sumaE’ 2 [3,5] [por aplicación de $!] = (sumaE’ $! (2+3)) [5] [por def. sumaE’] = sumaE’ 5 [5] [por aplicación de $!] = (sumaE’ $! (5+5)) [] [por def. sumaE’] = sumaE’ 10 [] [por aplicación de $!] = 10 [por def. sumaE’] 24 / 27
  • 25. IM Tema 10: Evaluación perezosa Aplicación estricta Comparación de consumo de memoria Comparación de consumo de memoria: *Main> sumaNE [1..1000000] *** Exception: stack overflow *Main> sumaE [1..1000000] 1784293664 *Main> :set +s *Main> sumaE [1..1000000] 1784293664 (2.16 secs, 145435772 bytes) 25 / 27
  • 26. IM Tema 10: Evaluación perezosa Aplicación estricta Plegado estricto Versión estricta de foldl en el Data.List foldl' :: (a -> b -> a) -> a -> [b] -> a foldl' f a [] = a foldl' f a (x:xs) = (foldl' f $! f a x) xs Comparación de plegado y plegado estricto:s *Main> foldl (+) 0 [2,3,5] 10 *Main> foldl' (+) 0 [2,3,5] 10 *Main> foldl (+) 0 [1..1000000] *** Exception: stack overflow *Main> foldl' (+) 0 [1..1000000] 500000500000 26 / 27
  • 27. IM Tema 10: Evaluación perezosa Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. Cap. Cap. 7: Eficiencia. 2. G. Hutton Programming in Haskell. Cambridge University Press, 2007. Cap. 12: Lazy evaluation. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. Cap. 2: Types and Functions. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. Cap. 2: Introducción a Haskell. Cap. 8: Evaluación perezosa. Redes de procesos. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. Cap. 17: Lazy programming. 27 / 27