apuntes unidad 3 programacion logico y funcional (ing. yahveh)

7
Subsecretaría de Educación Superior Dirección General de Educación Superior Tecnológica Instituto Tecnológico Superior de Ciudad Acuña Evaluación Perezosa En la teoría de lenguajes de programación, La evaluación perezosa (del inglés lazy evaluation) o llamada por necesidad es una estrategia de evaluación que retrasa el cálculo de una expresión hasta que su valor sea necesario, y que también evita repetir la evaluación en caso de ser necesaria en posteriores ocasiones. Esta compartición del cálculo puede reducir el tiempo de ejecución de ciertas funciones de forma exponencial, comparado con otros tipos de evaluación. Los beneficios de la evaluación perezosa son: El incremento en el rendimiento al evitar cálculos innecesarios, y en tratar condiciones de error al evaluar expresiones compuestas. La capacidad de construir estructuras de datos potencialmente infinitas. La capacidad de definir estructuras de control como abstracciones, en lugar de operaciones primitivas. La evaluación perezosa puede también reducir el consumo de memoria de una aplicación, ya que los valores se crean solo cuando se necesitan. Sin embargo, es difícil de combinar con las operaciones típicas de programación imperativa, como el manejo de excepciones o las operaciones de entrada/salida, Unidad III “Programación Lógica y Funcional” Página 1

Upload: andy-gaytan

Post on 11-Nov-2015

57 views

Category:

Documents


7 download

TRANSCRIPT

Subsecretara de Educacin SuperiorDireccin General de Educacin Superior TecnolgicaInstituto Tecnolgico Superior de Ciudad Acua

Subsecretara de Educacin SuperiorDireccin General de Educacin Superior TecnolgicaInstituto Tecnolgico Superior de Ciudad Acua

Evaluacin PerezosaEn lateora de lenguajes de programacin, Laevaluacin perezosa(del inglslazy evaluation) ollamada por necesidades una estrategia de evaluacin que retrasa el clculo de una expresin hasta que su valor sea necesario, y que tambin evita repetir la evaluacin en caso de ser necesaria en posteriores ocasiones. Esta comparticin del clculo puede reducir el tiempo de ejecucin de ciertas funciones de forma exponencial, comparado con otros tipos de evaluacin.Los beneficios de la evaluacin perezosa son: El incremento en el rendimiento al evitar clculos innecesarios, y en tratar condiciones de error al evaluar expresiones compuestas. La capacidad de construirestructuras de datospotencialmente infinitas. La capacidad de definir estructuras de control como abstracciones, en lugar de operaciones primitivas.La evaluacin perezosa puede tambin reducir el consumo de memoria de una aplicacin, ya que los valores se crean solo cuando se necesitan. Sin embargo, es difcil de combinar con las operaciones tpicas deprogramacin imperativa, como el manejo de excepciones o las operaciones de entrada/salida, porque el orden de las operaciones puede quedar indeterminado. Adems, la evaluacin perezosa puede conducir a fragmentar la memoria.Lo contrario de la evaluacin perezosa sera la evaluacin acaparadora, o evaluacin estricta, que es el modo de evaluacin por defecto en la mayora de loslenguajes de programacin.

3.1. La estrategia de evaluacin perezosaLas estrategias de evaluacin se dividen en dos grupos bsicos, estrictos y no estrictos, basados en cmo se manejan los argumentos de una funcin.Una expresin que consta de una funcin aplicada a uno o ms parmetros y que puede ser "reducida" aplicando dicha funcin la vamos a llamar Redex (Reducible Expression).TiposDe adentro hacia afuera o call-by-value:Esta estrategia elige el redex que est "ms adentro" entendiendo por esto al redex que no contiene otro redex. Si existe ms de un redex que cumple dicha condicin se elige el que est ms a la izquierda.

De afuera hacia adentro o call-by-name:Elige el redex que est "ms afuera" entendiendo por esto al redex que no esta contenido en otro redex. Si existe ms de un redex que cumple dicha condicin se elige el que est ms a la izquierda.

Evaluaciones que no terminanTengan en cuenta la siguiente definicininf = 1 + inf

Intentar reducir la expresin inf siempre nos va a dar como resultado una expresin ms y ms grande (independientemente de la estrategia de evaluacin que usemos)infaplicamos inf1 + infaplicamos inf (porque + es estricta)1 + (1 + inf)aplicamos inf (porque + es estricta)... 1 + (1 + (1 + (1 + (1 + (1 + .... + inf )))))Por ende, est evaluacin nunca terminara.

Para los ejemplos se considera la funcin

mult :: (Int,Int) -> Intmult (x,y) = x*y Evaluacin mediante paso de parmetros por valor (o por ms internos): mult (1+2,2+3) = mult (3,5) [por def. de +] = 3*5 [por def. de mult] = 15 [por def. de *]

Evaluacin mediante paso de parmetros por nombre (o por ms externos):

mult (1+2,2+3) = (1+2)*(3+5) [por def. de mult] = 3*5 [por def. de +] = 15 [por def. de *]

Evaluacin con lambda expresiones Se considera la funcinmult' :: Int -> Int -> Intmult' x = \y -> x*y Evaluacin:

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 *]

3.2. Tcnicas de programacin funcional perezosaLa semntica adoptada para el no determinismo es la de eleccin en la invocacin (call-time choice), por resultar ms natural para la programacin y ms eficaz en la ejecucin el corresponderse con el mecanismo de comparticin.En el no-determinismo existen varias tcnicas como son: Tcnica de backtracking (prolog)Si un alternativa falla, el flujo retorna hasta la ltima decisin e intente otra. Tcnica de guardias (guards)Ms de una es cierta, se escoge cualquiera de ellas Tcnica de aprendizaje reforzado (a-lisp)Recordar decisiones exitosas y aumentar su prioridad as como considerar las decisiones en el contexto del estado mutable.

Bsqueda no determinista Ofrece muchos posibles resultados Emplean modelos de computacin tales como la mquina de Turing probabilstica, que no son deterministas. Puede simularse utilizando la lista de xitos Datos no deterministas Requiere tipo de datos diferente como son Data list m a =nil (cons (m a) (m (list a))Puede representar lista perezosa no deterministaCons [2] [nil. Cons [1] j]:: list [] intLos argumentos de cons representan computacin no determinista, permute y IsSorted se pueden adoptar a la lista de tipo permute y genera permutaciones perezosamente los rendimientos IsSorted [true, false] es aplicada por encima de la lista (s).Unidad III Programacin Lgica y FuncionalPgina 1