1

Return []はどのように関数から結果を返すのか、少し混乱しています。たとえば、次の2つの関数を考えてみましょう。

CalcLossTotal = Function[
   {data, units},

   Clear[i];
   Return[Table[
     data[[i, 1]]*units,
     {i, 1, Length[data]}]
    ];
   ]; 

CalcPremiums = Function[
   {data, lossTotal},

   Clear[i];
   Return[Table[
     data[[i, 2]]*lossTotal[[i]],
     {i, 1, Length[data]}]
    ];
   ];

ここで、CalcPremiums []は、CalcLossTotal[]と両方で同じデータに依存します。LossTotal(たとえば、CalcLossTotal []からの結果)を計算すると、そこから返される結果はデー​​タの配列ではなく、

Return[{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000}]

これはMathematicaが機能する方法ですか、それとも関数を定義したり関数から戻ったりするときに私が見逃していることがあります。

前もって感謝します。

4

2 に答える 2

2

必要な構成は次のとおりです。

CalcPremiums[data_, lossTotal_] := (
  Return[Table[data[[i, 2]]*lossTotal[[i]], {i, 1, Length[data]}]];)

最終結果を返す場合、returnは不要であることに注意してください。

CalcPremiums[data_, lossTotal_] := (
  Table[data[[i, 2]]*lossTotal[[i]], {i, 1, Length[data]}]);

(括弧内のTable []の後にセミコロンがないことに注意してください)ここでも括弧は必要ありませんが、実際に複数行の関数があると仮定して、括弧を残しました。

なぜあなたの構造が「return[]」を返すのか、私は少し戸惑っていると言わなければなりません。このことを考慮:

g = Function[u, If[u < 0, Return[u], 0]];
f[x_] := (
    y = g[x] ;
    {x, y})

x <0の場合、純粋関数(g)の効果は、y = xを設定するのではなく、呼び出し元の関数(f)からxを返すことです。

 f[-1]-> -1   , f[1] -> {1,0} 

私は論理を見ますが、それは私には明らかではありません。

于 2013-02-26T17:04:03.453 に答える
0

問題は、属性を持つ関数の影響だと思いますHoldAll

このように書き直せば、関数は機能します:-

CalcLossTotal = Function[
   {data, units},

   Catch[
    Clear[i];
    Throw[Table[
      data[[i, 1]]*units,
      {i, 1, Length[data]}]
     ];
    ]];


CalcPremiums = Function[
   {data, lossTotal},

   Catch[
    Clear[i];
    Throw[Table[
      data[[i, 2]]*lossTotal[[i]],
      {i, 1, Length[data]}]
     ];
    ]];
于 2013-02-27T12:37:53.243 に答える