在Perl中是否有一些像zip和fold这样的函数?

时间:2012-02-02 16:08:37

标签: perl map zip fold

我想在perl中使用"zip""fold""map"等函数。 (就像在Haskell中一样。)我找到了地图并且效果很好。那么,是否有拉链和折叠?非常感谢你。

4 个答案:

答案 0 :(得分:10)

List::Util库包含reduce(),其基本上与fold相同。

List::MoreUtils包含zip()函数。

两者都不是内置的,主要是因为Perl不是函数式编程语言。

答案 1 :(得分:8)

我已经在我的模块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

答案 2 :(得分:5)

如果您对在Perl中使用函数式编程概念感兴趣,那么我强烈建议您阅读Higher Order Perl

答案 3 :(得分:2)

提供函数式编程工具的模块:

您可能也对({免费下载)图书Higher Order Perl感兴趣。