Wolfram Mathematica返回[]奇怪的结果?

时间:2013-02-26 13:35:46

标签: wolfram-mathematica

我有点困惑,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的工作方式,还是在定义/返回函数时我会遗漏一些东西。

提前致谢。

2 个答案:

答案 0 :(得分:2)

你想要的结构是:

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

请注意,如果要返回最终结果,则返回是超级的,

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

(注意括号内的Table []之后没有分号)这里也不需要括号,但是假设你真的有多行函数我就把它们留下了。

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

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} 

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

答案 1 :(得分: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]}]
     ];
    ]];