Encuentro que una de las características más interesantes de Haskell y Perl6 es la capacidad de diferir el cálculo de valores hasta que realmente se necesiten.Ejemplos de técnicas de evaluación perezosa en Perl 5?
Perl5 por el contrario le gusta hacer todo de inmediato, pero por lo que puedo decir, contiene todas las primitivas necesarias para la evaluación perezosa. Estos son:
- teniendo una referencia a
@_
en una subrutina crea una referencia de matriz que está alias de los identificadores en la lista de parámetros, incluso si algunos de estos identificadores no contienen valores todavía. - devolviendo objetos sobrecargados/atados de tales subrutinas que contienen
\@_
internamente, y luego eliminarlos cuando sea necesario. (Y hay varios módulos de CPAN que abstraer los detalles de unión/sobrecarga)
He estado experimentando con diversas técnicas de programación perezosos en Perl (Tengo un módulo en las obras que implementa un poco justo de la Haskell Preludio en Perl5 (cosas como la co-recursión: $_ = list 0, 1, zipWith {&sum} $_, tail $_ for my $fibs;
para definir la secuencia de Fibonacci ya están funcionando)). Pero tengo la sensación de que hay algunos errores sutiles escondidos en el código que pueden manifestarse cuando las funciones se usan en expresiones/programas más grandes.
Así que me pregunto si hay algún buen ejemplo (CPAN/blogs/libros) que alguien conozca que emplee Haskell/Perl6 como la pereza en Perl5? En particular, me gustaría leer cualquier código de tamaño significativo que emplee este tipo de pereza.
Me gustaría también estar interesado en saber si alguien se ha topado con ningún trampas o problemas de difícil solución en torno a la implementación de la evaluación perezosa en Perl 5.
Estoy asumiendo que usted ha leído orden superior Perl. Tiene mucho material sobre iteradores, flujos infinitos y pereza. –