| 文章類別 | 資訊科技 |
| 自訂文章類別 | cache perl pure-function |
| 自訂個人專欄名稱 | 我的私有觀點 |
pure function
A pure function:
Has no side effects
Return value depends only on arguments
Example:
sub factorial {
my $n = shift;
$n == 0 ? 1 : $n * factorial($n-1);
}
cache 只對pure function 有意義;這可以思考,查詢一個檔案的修改時間的這種function,他並非一個pure function,所以;對非pure function做cache 是沒有意義的,這裡有一個例子:
Highly Recursive Functions
sub fib {
my ($n) = @_;
return $n if $n ==0 || $n == 1;
return fib($n-2) + fib($n-1);
}
This function is very very slow!
Caching Fixes Recursion
Solution: Caching
@fib = (0, 1);
sub fib {
my ($n) = @_;
return $fib[$n] if defined $fib[$n];
return $fib[$n] = fib($n-1) + fib($n-2);
}
fib(20) computes fib(18) and fib(19)
fib(19) goes to compute fib(18)
But it is already in $fib[18]
Function is now very fast,Almost as fast as a pure iterative version,
Unlike the iterative version, this version required no ingenuity
以上文章節錄自 http://perl.plover.com/yak/hw-dcpm/
__________________________
blog :http://rd-program.blogspot.com
rss : http://feeds.feedburner.com/LazyGuy
- luke_shei 的部落格
- 如果想要發表回應,請先登入 或 註冊。
- 瀏覽次數: 462




最新回應
1 週 4 日 前
1 週 4 日 前
1 週 5 日 前
2 週 3 日 前
2 週 4 日 前
2 週 4 日 前
2 週 4 日 前
3 週 5 日 前
3 週 6 日 前
5 週 2 日 前