EVALUACION PEREZOSA (ESTRATEGIAS DE EVALUACION PEREZOSA) HASKELL – ES UN LENGUAJE DE PROGRAMACION ESTANDARIZADO MULTI-PROPÓSITO FUNCIONAL TIPIFICADO, CON FUNCIONES DE ORDEN SUPERIOR, POLIMORFISMO, SISTEMA DE CLASE DE TIPOS, EVALUACION PEREZOSA… CON SEMÁNTICAS NO ESTRICTAS Y FUERTE TIPIFICACIÓN ESTÁTICA.
TÉCNICAS DE PROGRAMACIÓN FUNCIONAL PEREZOSA LA SEMANTICA ADOPTADA PARA EL NO DETERMINISMO ES LA DE ELECCIÓN EN LA INVOCACIÓN (CALL-TIME CHOICE), POR RESULTAR MÁS NATURAL PARA LA PROGRAMACIÓN Y MÁS EFICAZ EN LA EJECUCIÓN AL CORRESPONDERSE CON EL MECANISMO DE COMPARTICIÓN. EN EL NO-DETERMINISMO NO-DETERMINISMO EXISTEN VARIAS TECNICAS COMO SON:
TECNICA DE BACKTRACKING (PROLOG): SI UNA ALTERNATIVA “FALLA”, EL FLUJO RETORNA
HASTA LA ÚLTIMA DECISIÓN E INTENTA OTRA. TÉCNICA DE GUARDIAS (GUARDS): SI MÁS DE UNA ES CIERTA, SE ESCOGE CUALQUIERA DE ELLAS. TÉCNICA DE APRENDIZAJE REFORZADO(A-LISP): RECORDAR DECISIONES EXITOSAS Y AUMENTAR SU PRIORIDAD ASÍ COMO CONSIDERAR LAS DECISIONES EN EL CONTEXTO DEL ESTADO MUTABLE.
BUSQUEDA NO DETERMINISTA UN ALGORITMO NO DETERMINIS D ETERMINISTA TA
OFRECE MUCHOS POSIBLES RESULTADOS. EMPLEAN MODELOS DE COMPUTACIÓN TALES COMO LA MÁQUINA DE TURING PROBABILÍSTICA, QUE NO SON DETERMINISTAS. PUEDE SIMULARSE UTILIZANDO LA LISTA DE ÉXITOS COMO POR EJEMPLO: SOLUCIONES X= X, X CANDIDATOS, VÁLIDOS.
DATOS NO DETERMINISTAS….
SACADO DE: PREZI.COM https://prezi.com/lhnyd5gqlj_-/un https://prezi.co m/lhnyd5gqlj_-/unidad-3-evaliacion-p idad-3-evaliacion-perezosa/ erezosa/
Evaluación perezosa (o lazy), es decir, las expresiones no se evalúan hasta que no se necesitan los resultados. Es, justamente, lo contrario de la evaluación eager (ansiosa), donde la evaluación de los argumentos se realiza antes de aplicar la función. La evaluación perezosa nos proporciona la ventaja de trabajar con listas potencialmente infinitas.
SACADO DE: http://www.uhu.es/nieves.pavon/pprogramacion/funcional/tema1f.html
EVALUACION PEREZOSA DENTRO DEL CONJUNTO DE LAS ESTRATEGIAS DE EVALUACIÓN, SE ENCUENTRAN PRINCIPALMENTE DOS GRANDES SUBCONJUNTOS: LAS ESTRATEGIAS DE EVALUACIÓN ESTRICTA Y LAS ESTRATEGIAS DE EVALUACION NO-ESTRICTA. EN EL PRIMER CONJUNTO, ENCONTRAMOS A LAS ESTRATEGIAS DONDE LAS EXPRESIONES SON EVALUADAS EN EL MOMENTO EN EL QUE SE LAS ENCUENTRA. EN EL SEGUNDO CONJUNTO, TENEMOS QUE A LAS ESTRATEGIAS DONDE LA EVALUACION DE UNA EXPRESIÓN SE DIFIERE HASTA UN MOMENTO POSTERIOR. UN EJEMPLO DE ESTAS ES CALL-BY-NAME, QUE CONSISTE EN REEMPLAZAR EN EL MOMENTO EN EL QUE SE NECESITE, EN EL CUERPO DEL CONTEXTO, LAS DEMANDAS A LA EXPRESIÓN POR LA EXPRESIÓN DIRECTAMENTE. UNA VERSIÓN MEJORADA DE CALL-BY-NAME ES CALL-BY-NEED, MÁS CONOCIDA COMO EVALUACIÓN PEREZOSA O LAZINESS, QUE SOLO EVALUA UNA SOLA VEZ LA EXPRESION PARA EVITAR REPETIR LOS CÁLCULOS. EN HASKELL, DE FORMA PREDETERMINADA Y CON ALGUNAS EXCEPCIONES, LAS EXPRESIONES SE EVALÚAN POR CALL-BY-NEED. EL LENGUAJE PROVEE LOS MECANISMOS NECESARIOS PARA ESPECIFICAR LA ESTRATEGIA SEGÚN SEA NECESARIO. LA EVALUACIÓN PEREZOSA TIENE SUS COSTOS. USUALMENTE ES MENOS EFICIENTE QUE LAS ESTRICTAS, DEBIDO A LA CONTABILIDAD ADICIONAL REQUERIDA PARA SATISFACER TODAS SUS CARACTERÍSTICAS. EL COSTO ES SIGNIFICANTE PERO AL HABERSE CONSIDERADO UN FACTOR CONSTANTE EN LA MATORÍA DE LOS CASOS, ESTA OPCIÓN PREVALECIÓ POR ENCIMA DEL RESTO. SUCEDE TAMBIÉN QUE ES MUY DIFÍCIL, INCLUSIVE PARA LOS PROGRAMADORES EXPERTOS, PREDECIR EL COMPORTAMIENTO ESPACIAL DE UN PROGRAMA PEREZOSO ESPECIALMENTE CUANDO ESTE FACTOR NO ES CONSTANTE, LO QUE CONDUJO A REPLANTEAR EL DISEÑO DE TAL FORMA DE PERMITIR CIERTOS COMPORTAMIENTOS ESTRICTOS. POR OTRO LADO, VARIOS LENGUAJES ESTRICTOS HAN COMENZADO A INCLUIR CARACTERÍSTICAS PEREZOSAS AL RECONOCER LAS VIRUTDES QUE TIENE EN MUCHOS CASOS. COMO UN RESULTADO DE ESTO, LA DIVISIÓN ENTRE LO ESTRICTO Y LO PEREZOSO HA DEJADO DE VERSE COMO UNA CUESTIÓN DE BLANCOS Y NEGROS. SACADO DE: http://web.fi.uba.ar/~falbani/7531/Haskell.pdf
1.2.1.4 Evaluación Perezosa Los lenguajes tradicionales, evalúan todos los argumentos de una función antes de conocer si estos serán utilizados. Por ejemplo: ****************************** Con el sistema de evaluación tradicional, el programador no devolvería nada, puesto que al intentar evaluar g(5) el sistema entraría en un bucle infinito. Dicha técnica de evaluación se conoce como evaluación ansiosa porque evalúa todos los argumentos de una función antes de conocer si son necesarios. SACADO DE: http://www.lcc.uma.es/~blas/apuntes/PDAv/p2000-2001/historia.pdf
OTHER LINKS: http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Lazy_evaluation.html http://www.cse.iitd.ac.in/~saroj/LFP/LFP_2013/sml6.pdf http://online.fliphtml5.com/dduw/qtoh/qtoh.pdf
http://di002.edv.uniovi.es/~labra/FTP/PLF/pf.pdf http://emanchado.github.io/camino-mejor-programador/html/ch04.html http://malcodigo.blogspot.mx/2008/02/evaluacin-perezosa.html
A new programming technique for lazy functional languages http://doc.utwente.nl/17960/