2013-02-26 59 views
1

我有点困惑,Ret​​urn []如何返回函数的结果。例如,取这两个函数:Wolfram Mathematica返回[]奇怪的结果是什么?

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 []如结果)计算LossTotal,返回结果从它不是数据的阵列,但

Return[{0,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000}] 

这是数学的工作方式,或者有,我从定义时/回错过的东西功能。

在此先感谢。

+0

看一看[这里](http://stackoverflow.com/questions/8534324/how-does-return-work/)。 – 2013-03-06 12:11:06

回答

2

你想要的结构是这样的:

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

注意Return是superflous如果你正在返回的最终结果是这样,

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

(注意括号内没有分号后表[] )这里不需要括号,但是我让他们假设你确实有多线功能。

我必须说我有点困惑,为什么你的construt返回“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} 

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

+0

非常感谢,为我节省了很多时间。 :) – Tosh 2013-02-26 21:35:08

+0

@george - 这很有趣。 g'的'以下定义做你虽然意图什么:'克=函数[U,抓住[如果[C <0,掷[U],0]]]' – 2013-02-27 12:24:22

0

我想这个问题是具有属性HoldAll一个的Function效果。

你的功能将工作,如果重写,像这样: -

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]}] 
    ]; 
    ]];