《高阶Perl》——3.4 记忆术

简介: 本节书摘来自华章计算机《高阶Perl》一书中的第3章,第3.4节,作者(美)Mark Jason Dominus,译 滕家海,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 记忆术

给函数添加缓存技术代码不是非常困难的。且已经看到,需要的改变对任何函数几乎一样。那么,为什么不让计算机做这些呢?若告诉Perl想要使一个函数具有缓存行为。Perl应该能自动地执行所需的转换。这样的给函数添加缓存行为的自动的转换就称为记忆术(memoization),函数则称为带记忆的(memoized)。

标准的Memoize模块就是做这个的。如果Memoize模块可用,就完全不必重写fib代码。可以简单地在程序的顶部添加两行:

### Code Library: fib-automemo
use Memoize;
memoize 'fib';
# Compute the number of pairs of rabbits alive in month n
sub fib {
  my ($month) = @_;
  if ($month < 2) { return $month }
  fib($month-2) + fib($month-1);
}

fib现在展现了缓存行为。代码和原先的慢版完全一样,但是函数不再慢了。

相关文章
|
4月前
|
Perl
探索研究Perl 包和模块
【9月更文挑战第20天】
67 16
|
4月前
|
存储 程序员 C语言
探索研究Perl 基础语法
【9月更文挑战第5天】
38 6
|
5月前
|
Ruby
Ruby中的模块奥秘:混合魔法揭秘
【8月更文挑战第31天】在探索Ruby语言的过程中,我发现模块(Module)和混合(inclusion)是两个非常有用的特性。模块可以组织代码,包含方法、类和常量而不被实例化。混合则允许模块中的方法像类的方法一样被调用,提高代码复用性和灵活性。例如,可以将文本处理方法放入模块并通过`include`关键字混合到其他类中使用。此外,模块还可以在运行时动态添加到类中,按需加载功能。这些特性使代码更清晰、易于维护和扩展。希望这篇博客能让你感受到Ruby的魅力,并激发你进一步探索的兴趣。
48 0
|
6月前
|
Unix Linux 开发者
Perl 语言入门学习
Perl 语言入门学习
|
缓存 程序员 Perl
《高阶Perl》——3.6 CAVEATS
本节书摘来自华章计算机《高阶Perl》一书中的第3章,第3.6节,作者(美)Mark Jason Dominus,译 滕家海,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1458 0
|
缓存 自然语言处理 C语言
《高阶Perl》——3.5 MEMOIZE模块
本节书摘来自华章计算机《高阶Perl》一书中的第3章,第3.5节,作者(美)Mark Jason Dominus,译 滕家海,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1616 0
|
缓存 Perl
《高阶Perl》——3.10 可供选择的记忆术
本节书摘来自华章计算机《高阶Perl》一书中的第3章,第3.10节,作者(美)Mark Jason Dominus,译 滕家海,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1632 0