首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl 5中惰性计算技术的示例?

Perl 5中惰性计算技术的示例?
EN

Stack Overflow用户
提问于 2010-12-07 22:34:04
回答 3查看 2K关注 0票数 6

我发现Haskell和Perl6最有趣的特性之一是能够将计算值推迟到实际需要的时候。

另一方面,Perl5喜欢立即完成所有事情,但据我所知,它包含了用于惰性评估的所有必要的原语。这些措施是:

  • 在子例程中对@_的引用创建一个数组引用,该数组引用被别名为其参数列表中的标识符,即使其中一些标识符尚未包含值。
  • 从内部保存\@_的子程序返回重载/绑定对象,然后在需要时取消引用。(还有各种不同的CPAN模块,它们抽象出了绑定/重载细节)

我一直在用Perl进行各种懒散编程技术的实验(我在工作中有一个模块,它在Perl5中实现了相当一部分Haskell (比如协同递归:定义斐波纳契序列的$_ = list 0, 1, zipWith {&sum} $_, tail $_ for my $fibs;已经在工作))。但是我有一种感觉,在代码中隐藏了一些微妙的But,当函数被使用在更大的表达式/程序中时,这些But可能会显现出来。

因此,我想知道是否有人知道有什么好的例子(CPAN /blog/book)雇用Haskell/ Perl5 6,比如Perl5中的懒惰?特别是,我想读一遍任何使用这种懒惰的大代码。

我还想知道,在Perl 5中,是否有人遇到过与延迟计算的实现有关的问题或棘手的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-07 22:57:48

高级Perl (可免费获得的在线)有一章叫做“无限流”。也许这是个很好的起点。

票数 9
EN

Stack Overflow用户

发布于 2010-12-07 23:44:50

好吧,驼鹿延迟加载属性做这个

默认和构建器方法 属性可以有默认值,而Moose提供了两种方法来指定默认值。 “默认”和“建造者”选项描述..。 惰性 驼鹿可以通过使属性“懒惰”来延迟属性总数: 有'size‘=> ( is => 'ro',惰性=> 1,builder => '_build_size’); 当“懒惰”为真时,在调用读取器方法之前不会生成默认值,而不是在对象构造时。您可能选择这样做有几个原因。 首先,如果该属性的默认值依赖于其他属性,则该属性必须“懒惰”。在对象构造期间,不按可预测的顺序生成默认值,因此在生成默认值时不能指望填充其他属性。 第二,在需要违约之前,通常没有理由计算它。使属性“懒惰”使您可以将成本推迟到需要属性时再计算。如果不需要该属性,则可以节省一些CPU时间。 我们建议您使用构建器或非平凡的默认属性来创建任何属性,这是理所当然的。

票数 6
EN

Stack Overflow用户

发布于 2010-12-07 22:54:54

我认为最大的问题是“魔法冲突”。当您试图做一些您认为是不确定的事情,而其他模块的作者试图做一些他们认为是不确定的事情。谁的魔法赢了?

一个人总是可以窥视另一个变量的魔力,甚至在不经意间驱散它,魔法永远不会防弹。

如果您可以通过穷举的案例测试来实现100%的正交性,您可能可以休息easier...maybe。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4382337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档