SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Arquitectura Multiprocesadores
Arquitectura Multiprocesadores Arquitectura Multiprocesadores
Arquitectura Multiprocesadores JUANR1022
 
Dispositvos de entrada y salida
Dispositvos de entrada y salidaDispositvos de entrada y salida
Dispositvos de entrada y salidaitzayana bacilio
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y ProcesadorMario Alberto Antonio Lopez
 
Organización y estructura interna del cpu
Organización y estructura interna del cpuOrganización y estructura interna del cpu
Organización y estructura interna del cpuIsaí Beto Matz Mijes
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Juan Anaya
 
Configuracion y administracion del espacio en disco
 Configuracion y administracion del espacio en disco Configuracion y administracion del espacio en disco
Configuracion y administracion del espacio en discoYael_21
 
Ventajas y Desventajas de la POO
Ventajas y Desventajas de la POOVentajas y Desventajas de la POO
Ventajas y Desventajas de la POOjoelyar
 
Trabajo 2 transacciones en base de datos
Trabajo 2   transacciones en base de datosTrabajo 2   transacciones en base de datos
Trabajo 2 transacciones en base de datosJose O- Vera
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazadorRickyZhengHu
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraAlexandraMolinaSanchez
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesadorFernando Camacho
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlLic_Vera
 
GESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas OperativosGESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas Operativosadriel91
 
Ambientes de servicios, negocios, industria y comercio electrónico
Ambientes de servicios, negocios, industria y comercio electrónico Ambientes de servicios, negocios, industria y comercio electrónico
Ambientes de servicios, negocios, industria y comercio electrónico Carlos Rangel Hernández
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estadosstill01
 

Mais procurados (20)

Arquitectura Multiprocesadores
Arquitectura Multiprocesadores Arquitectura Multiprocesadores
Arquitectura Multiprocesadores
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Dispositvos de entrada y salida
Dispositvos de entrada y salidaDispositvos de entrada y salida
Dispositvos de entrada y salida
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y Procesador
 
Organización y estructura interna del cpu
Organización y estructura interna del cpuOrganización y estructura interna del cpu
Organización y estructura interna del cpu
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.
 
Curso básico de ensamblador
Curso básico de ensambladorCurso básico de ensamblador
Curso básico de ensamblador
 
Configuracion y administracion del espacio en disco
 Configuracion y administracion del espacio en disco Configuracion y administracion del espacio en disco
Configuracion y administracion del espacio en disco
 
Ventajas y Desventajas de la POO
Ventajas y Desventajas de la POOVentajas y Desventajas de la POO
Ventajas y Desventajas de la POO
 
Cuadro comparativo sgbd
Cuadro comparativo sgbdCuadro comparativo sgbd
Cuadro comparativo sgbd
 
Trabajo 2 transacciones en base de datos
Trabajo 2   transacciones en base de datosTrabajo 2   transacciones en base de datos
Trabajo 2 transacciones en base de datos
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Administración de procesos y del procesador
Administración de procesos y del procesadorAdministración de procesos y del procesador
Administración de procesos y del procesador
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
GESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas OperativosGESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas Operativos
 
Dev-C++
Dev-C++ Dev-C++
Dev-C++
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Ambientes de servicios, negocios, industria y comercio electrónico
Ambientes de servicios, negocios, industria y comercio electrónico Ambientes de servicios, negocios, industria y comercio electrónico
Ambientes de servicios, negocios, industria y comercio electrónico
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
 

Semelhante 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
 

Semelhante 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
 

Mais 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
 

Mais 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

ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.docRodneyFrankCUADROSMI
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSYadi Campos
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptxRigoTito
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Diapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundariaDiapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundariaAlejandraFelizDidier
 
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxEL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxsisimosolorzano
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnnlitzyleovaldivieso
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxNadiaMartnez11
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 

Último (20)

ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Diapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundariaDiapositivas de animales reptiles secundaria
Diapositivas de animales reptiles secundaria
 
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxEL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 

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