代码
sub sqrsumfunc {
my $sum; $sum += ($_) * ($_) for @_; $sum;
}我试着用元素乘法来代替它及其求和。
use strict;
use warnings;
use List::Util qw(sum);
my @x = @{ $_[0] };
my $Sxx = sum( @x * @x );但与实际结果有很大的偏差。
如何用Perl标准函数替换第一个函数?
发布于 2015-05-03 21:29:55
您的第二个代码块不是作为子例程编写的,因此没有可以使用的@_数组,而且my @x = @{ $_[0] }也不能工作。它也不同于第一个块,因为它期望一个对值数组的引用,而第一个子例程只将一个值列表作为参数。
主要的问题是你在写
my $Sxx = sum( @x * @x );它与数组的大小成正比。你需要的是
my $sum_xx = sum map $_ * $_, @x;或者,如果你愿意
my $sum_xx = sum map { $_ * $_ } @x;对于相同的构造来说,这只是不同的语法。
https://stackoverflow.com/questions/30019569
复制相似问题