我想在 perl中使用一些功能,例如“zip”、“fold”和“map” 。(就像在 Haskell 中一样。)我找到了 map 并且效果很好。那么,有拉链和折叠吗?非常感谢你。
问问题
2826 次
4 回答
10
于 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
提供函数式编程工具的模块:
- Perl
map
和grep
- 列表::实用程序
- 列表::MoreUtils
- List::Gen和List::Gen::Haskell(包括惰性列表)
- 算法::循环
您可能还对(现在免费下载)一书Higher Order Perl感兴趣。
于 2012-02-02T21:04:06.133 回答