我有点困惑,Return[]是如何从函数返回结果的。例如,以这两个函数为例:
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[]和数据,这两个数据是相同的。在计算结果时(例如来自CalcLossTotal[]的结果),它返回的结果不是数据数组,但是
Return[{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000}]这是Mathematica的工作方式,还是我在定义/返回函数时遗漏了什么。
提前谢谢。
发布于 2013-02-27 01:04:03
你想要的结构是:
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[]后面没有分号)这里也不需要括号,但我假设您真的有一个多行函数,所以我把它们留了下来。
我必须说我有点困惑,为什么你的构造返回"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-27 20:37:53
我猜问题是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]}]
];
]];https://stackoverflow.com/questions/15090483
复制相似问题