【问题标题】:Is there some functions like zip and fold in Perl?Perl 中有 zip 和 fold 之类的功能吗?
【发布时间】:2012-02-02 16:08:36
【问题描述】:

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

【问题讨论】:

标签: perl map zip fold


【解决方案1】:

List::Util 库包括 reduce(),它的功能基本上与 fold 相同。

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

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

【讨论】:

  • 非常感谢@Wooble!它们就是我所需要的!
  • @madper:注意 Perl 内置了 mapgrep(过滤器)。
  • reduce 不是内置的,但它是核心 Perl 的一部分。
【解决方案2】:

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

使用-&gt;reduce('.')-&gt;reduce(sub {$a . $b}) 也可以。

或者如果你在打高尔夫球:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 2014-03-08
        • 1970-01-01
        相关资源
        最近更新 更多