1

我有点困惑,Ret​​urn [] 如何从函数返回结果。例如,采用这两个功能:

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[] 后面没有分号)这里也不需要括号,但我假设你真的有一个多行函数。

我必须说我有点困惑为什么你的 construt 返回“return []”。考虑一下:

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

对于 x<0,纯函数 (g) 的效果是从调用函数 (f) 返回 x,而不是设置 y=x。

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

我看到了逻辑,但这对我来说并不明显。

于 2013-02-26T17:04:03.453 回答
0

我猜这个问题是Function具有属性的影响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 回答