1

浮動小数点数の配列があります: (.25, .45, .15, .27)。配列要素の数で除算するのではなく、各要素を互いに乗算したいと思います。

foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;

これにより、値 0 が生成されます。構文が正しいかどうかわかりません。

4

3 に答える 3

6

List::Utilルートもあります。

use List::Util qw(reduce);

my @array = (.25, .45, .15, .27);
my $mult = reduce { $a * $b } 1, @array;
my $score = $mult / @array;

$aおよびに関する警告が表示され場合は$b、Perl monks に関するスレッドで、それらを黙らせる方法を説明しています。

于 2013-08-20T05:41:13.453 に答える
6

構文は正しいですが$score、ループのたびに変数を初期化しているため、反復ごとに変数が 0 に設定されています。ループの外側に移動するだけで機能します。

my $score = 1 #Need to initialize to 1 for multiplying
foreach my $element (@array) {
    $score *= $element;
}
$score = $score/$numofelements; #Assuming $numofelements is set already
于 2013-08-20T05:32:29.867 に答える
5

遅い答えですが、もう少しPerlっぽいかもしれません:

my @array = (3, 5, 4, 7);

my $score = 1;
$score *= $_ for @array;
print ($score / @array), "\n";

ライブデモ

$numelementsvalue が配列の長さを格納するという保証がないため、おそらく使用しないことが最善であることに注意してください。スカラーコンテキストで使用するだけ@arrayで、配列の長さを無料で取得できます。

于 2013-08-20T05:42:16.860 に答える