4

我想在 perl中使用一些功能,例如“zip”“fold”“map” 。(就像在 Haskell 中一样。)我找到了 map 并且效果很好。那么,有拉链和折叠吗?非常感谢你。

4

4 回答 4

10

List::Util库包括reduce(),它本质上是做什么fold的。

List::MoreUtils包含一个zip()功能。

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

于 2012-02-02T16:13:24.050 回答
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('.')or->reduce(sub {$a . $b})也可以。

或者,如果您正在打高尔夫球:

say <[.]>->(<1..4>|<a..d>);

或者对于 Haskell 版本,请参见List::Gen::Haskell

于 2012-02-02T16:44:07.497 回答
5

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

于 2012-02-02T16:41:14.083 回答
2

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

您可能还对(现在免费下载)一书Higher Order Perl感兴趣。

于 2012-02-02T21:04:06.133 回答