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

mad*_*per 4 perl zip map fold

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

Woo*_*ble 10

List::Util库包括reduce(),它基本上做了什么fold.

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

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


Eri*_*rom 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
Run Code Online (Sandbox Code Playgroud)

或者使用glob函数来构建范围:

use List::Gen 'glob';

say <1 .. 4>->zip(<a .. d>)->reduce('$a.$b'); # 1a2b3c4d
Run Code Online (Sandbox Code Playgroud)

使用->reduce('.')->reduce(sub {$a . $b})也有效.

或者如果你打高尔夫球:

say <[.]>->(<1..4>|<a..d>);
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*oss 5

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