首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wolfram Mathematica Return[]奇怪的结果?

Wolfram Mathematica Return[]奇怪的结果?
EN

Stack Overflow用户
提问于 2013-02-26 21:35:46
回答 2查看 230关注 0票数 1

我有点困惑,Return[]是如何从函数返回结果的。例如,以这两个函数为例:

代码语言:javascript
复制
CalcLossTotal = Function[
   {data, units},

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

代码语言:javascript
复制
CalcPremiums = Function[
   {data, lossTotal},

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

其中,CalcPremiums[]依赖于CalcLossTotal[]和数据,这两个数据是相同的。在计算结果时(例如来自CalcLossTotal[]的结果),它返回的结果不是数据数组,但是

代码语言:javascript
复制
Return[{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000}]

这是Mathematica的工作方式,还是我在定义/返回函数时遗漏了什么。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 01:04:03

你想要的结构是:

代码语言:javascript
复制
CalcPremiums[data_, lossTotal_] := (
  Return[Table[data[[i, 2]]*lossTotal[[i]], {i, 1, Length[data]}]];)

请注意,如果要返回最终结果,则返回是多余的,

代码语言:javascript
复制
CalcPremiums[data_, lossTotal_] := (
  Table[data[[i, 2]]*lossTotal[[i]], {i, 1, Length[data]}]);

(请注意,括号内的Table[]后面没有分号)这里也不需要括号,但我假设您真的有一个多行函数,所以我把它们留了下来。

我必须说我有点困惑,为什么你的构造返回"return[]“。请考虑以下内容:

代码语言:javascript
复制
g = Function[u, If[u < 0, Return[u], 0]];
f[x_] := (
    y = g[x] ;
    {x, y})

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

代码语言:javascript
复制
 f[-1]-> -1   , f[1] -> {1,0} 

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-27 20:37:53

我猜问题是FunctionHoldAll属性造成的影响。

如果像这样重写,你的函数将会工作:

代码语言:javascript
复制
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]}]
     ];
    ]];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15090483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档