【发布时间】:2012-02-02 16:08:36
【问题描述】:
【问题讨论】:
-
另一个您可能会感兴趣的模块是Algorithm::Loops。
【问题讨论】:
List::Util 库包括 reduce(),它的功能基本上与 fold 相同。
List::MoreUtils 包含一个zip() 函数。
两者都不是内置的,主要是因为 Perl 不是一种函数式编程语言。
我已经在我的模块 List::Gen 中实现了许多这些功能(甚至是类似 Haskell 的懒惰功能)
use List::Gen qw(zip reduce);
my @list = zip [1 .. 4], ['a' .. 'd'];
my $str = reduce {$a . $b} @list;
say $str; # 1a2b3c4d
或者使用glob 函数来构建范围:
use List::Gen 'glob';
say <1 .. 4>->zip(<a .. d>)->reduce('$a.$b'); # 1a2b3c4d
使用->reduce('.') 或->reduce(sub {$a . $b}) 也可以。
或者如果你在打高尔夫球:
say <[.]>->(<1..4>|<a..d>);
或者对于 Haskell 版本,请参阅 List::Gen::Haskell
【讨论】:
如果您对在 Perl 中使用函数式编程概念感兴趣,那么我强烈建议您阅读Higher Order Perl。
【讨论】:
提供函数式编程工具的模块:
map 和 grep
您可能还对Higher Order Perl 这本书(现在免费下载)感兴趣。
【讨论】: