【问题标题】:Wolfram Mathematica Return[] strange result?Wolfram Mathematica Return[] 奇怪的结果?
【发布时间】:2013-02-26 13:35:45
【问题描述】:

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

提前致谢。

【问题讨论】:

标签: wolfram-mathematica


【解决方案1】:

你想要的结构是这样的:

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

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

我明白其中的逻辑,但对我来说并不明显。

【讨论】:

  • 非常感谢,为我节省了很多时间。 :)
  • @george - 这很有趣。 g 的以下定义符合您的意图:g = Function[u, Catch[If[u &lt; 0, Throw[u], 0]]]
【解决方案2】:

我猜问题是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]}]
     ];
    ]];

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2012-12-16
    • 2012-12-06
    相关资源
    最近更新 更多