在Perl 5中,我们可以应用函数式编程技术(使用闭包,高阶函数,如map,grep等).但功能构成怎么样?让我们说,在
Haskell中,使用(.)函数可以很容易地完成:
map (negate . abs) [-3,2,4,-1,5]
在Perl中,这个“点函数”的等价物是什么?
解决方法
可悲的是,我不知道Haskell.
但是函数组合本质上是将一个函数的输出作为参数放入下一个函数中.
output =(negate.abs)(input)与output = negate(abs(input))相同.在Perl中,parens通常是可选的,输入隐含在map函数中,所以我们可以说
output = map (negate abs) list
现在只需将其转换为Perl语法,我们就可以了
my @output = map {- abs} (1,3);
对于数学/代数否定,和
my @output = map {! abs} (1,3);
对于逻辑否定(当然,它与map {!$_}(1,3)相同).