我有点困惑,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 []和两者相同的数据。在计算LossTotal(例如来自CalcLossTotal []的结果)时,从它返回的结果不是数据数组,而是
Return[{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000}]
这是Mathematica的工作方式,还是在定义/返回函数时我会遗漏一些东西。
提前致谢。
答案 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]}]
];
]];