2013-02-26 35 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]}] 
    ]; 
    ]];