【发布时间】:2011-01-22 02:40:24
【问题描述】:
我正在尝试将 Perl 脚本翻译成 PHP,但我遇到了一些 Perl 问题。例如,@_ -1 是什么意思?以及如何用 PHP 编写它?
整个函数如下:
sub variance {
my $sum = sum_squares (@_);
my $deg = @_ - 1;
return $sum/$deg;
}
好的,所有子程序如下:
sub mean { # mean of values in an array
my $sum = 0 ;
foreach my $x (@_) {
$sum += $x ;
}
return $sum/@_ ;
}
sub sum_squares { # sum of square differences from the mean
my $mean = mean (@_) ;
my $sum_squares = 0 ;
foreach my $x (@_) {
$sum_squares += ($x - $mean) ** 2 ;
}
return $sum_squares ;
}
sub variance { # variance of values in an array
my $sum_squares = sum_squares (@_) ;
my $deg_freedom = @_ - 1 ;
return $sum_squares/$deg_freedom ;
}
sub median { # median of values in an array
my @sorted = sort {$a <=> $b} (@_) ;
if (1 == @sorted % 2) # Odd number of elements
{return $sorted[($#sorted)/2]}
else # Even number of elements
{return ($sorted[($#sorted-1)/2]+$sorted[($#sorted+1)/2]) / 2}
}
sub histogram { # Counts of elements in an array
my %histogram = () ;
foreach my $value (@_) {$histogram{$value}++}
return (%histogram) ;
}
请多多包涵,因为这是我第一次接触 Perl。从我所看到的(测试)来看,在这种情况下,正确的答案是 David Dorward 的答案。关于这组子例程,我还有另一个问题是here。
【问题讨论】:
-
相等但不相等。写你想要的那个是明智的。如果您的意思是“比
@_中的事物数量少一个”,请写@_ - 1。如果您的意思是“@_中的最后一个索引”,请写为$#_。 -
(从技术上讲,如果您使用已弃用且彻底邪恶的
$[,两者可能甚至不相等。但不要那样做。)