我发现Haskell和Perl6的最有趣的功能之一就是能够将计算值推迟到实际需要时才使用。
另一方面,Perl5喜欢立即做所有事情,但是据我所知,它包含了所有用于懒惰求值的必要原语。那些是:
@_
会创建一个数组引用,该数组引用会别名为其参数列表中的标识符,即使其中一些标识符尚不包含值。 \@_
的子例程返回重载/绑定(bind)对象,然后在需要时取消引用。 (并且有各种CPAN模块可以抽象出平局/过载细节)我已经在Perl中尝试了各种惰性编程技术(我的工作中有一个模块,可以在Perl5中实现一定数量的Haskell Prelude(类似共同递归:定义Fibonacci序列的
$_ = list 0, 1, zipWith {&sum} $_, tail $_ for my $fibs;
的东西已经在起作用))。但是我有种感觉,当在较大的表达式/程序中使用函数时,代码中会隐藏一些细微的错误。因此,我想知道是否有任何人知道使用Haskell/Perl6的好例子(CPAN/博客/书籍),例如Perl5中的惰性?特别是,我想通读使用这种惰性的任何规模很大的代码。
我也想知道是否有人在Perl 5中实现延迟评估时遇到任何麻烦或棘手的问题。
最佳答案
高阶Perl(免费提供online)有一章称为“无限流”。也许这是一个很好的起点。