2013-04-16 17 views
0

我看到有很多關於這個站點上的Return []函數的線程。對其行爲甚至有非常好的描述。但是如果我對Mathematica非常陌生,會發生什麼?讓Return []做它自己的(C++)任務

事不宜遲,我想利用這個功能:

getBinIndex[eta_, pt_, etalimits_, ptlimits_] := 
    List[ 
     For[i = 1, i < Length[etalimits],  i++, 
      If[eta < etalimits[[i + 1]], Return[i]]], 
     For[i = 1, i < Length[ptlimits], i++, 
      If[pt < ptlimits[[i + 1]], Return[i]]] 
     ]; 

正如你所看到的,我真的很新。我想在Mathematica中有一百萬個這樣做的方法,但我有一個C背景,我覺得有必要告訴計算機一切。該功能起作用。它返回一個包含2個變量的列表,經過大量測試後,它們都可以。但它將結果作爲兩個Return的參數:{Return [4],Return [5]},我不能將它用作... Table的索引。你需要做些什麼才能將這些Return [x]變成x?

爲了讓你知道我有多少新手,我嘗試了N [Return [i]]。

乾杯,

阿德里安

+0

鑑於這是一個mathematica標籤,希望問題現在有道理。它與C++沒有關係。 – CashCow

回答

0
Catch[For[ .... If[ Throw[i] ] ] 

當然在數學,你幾乎不需要循環.. 像

Position[etalimits,ei_/;ei<eta&][[1,1]] 

會做。

編輯..試試這個:

For[i = 1, i < Length[etalimits],  i++, 
     If[eta < etalimits[[i + 1]], Return[i,CompoundExpression]]];, 

注意多餘的分號這使得對於[]環路CompoundExpression。我個人覺得這很奇怪,不會使用它..

+0

非常感謝喬治。它的工作(Catch版本)。我正在研究Position版本。這是奇怪的,所以我的函數的結果實際上是一個例外:))。我必須學習更多關於Mathematica的知識。 – user2285967

+0

@ user2285967您可能會覺得這段代碼有用:「[我在哪裏可以找到好的Mathematica編程實踐的例子?](http://mathematica.stackexchange.com/q/18/280)」 –

+0

謝謝Alexey!我實際上購買了Sal Mangano的食譜和Schaum的Mathematica概要。現在我必須爲他們騰出時間。 – user2285967