return
需要參數。例如,如果您想返回true
,則需要編寫return(true)
。 return
停止迭代並將其參數的值作爲循環的值返回。
break
的目的是讓您在計算過程中改變環境(例如全局變量)。
(%i1) k : 10;
(%o1) 10
(%i2) (break(k*10),k*10);
100
Entering a Maxima break point. Type 'exit;' to resume.
_k : 20;
20
_exit;
(%o2) 200
所以k
設置爲10,和break(k*10)
計算的表達式k*10
,則暫停計算,讓我換個環境,在這一點上,我設置k : 20
和類型出口恢復的計算,然後千里馬針對新值k
評估下一個表達式k*10
。
throw
與catch
函數一起使用。 catch(e1,e2,...,en)
評估表達式e1,e2,...,en
。如果這些評估都不是throw
函數,則catch
返回值en
。如果其中一個表達式的計算結果爲throw
函數,則返回throw
函數的值,並且不評估其餘表達式。
(%i1) h(x) := if x < 0 then throw(x) else f(x)$
(%i2) g(l) := catch (map (h, l))$
h(x)
回報f(x)
積極x
和throw(x)
負x
。 g(l)
將h
映射到列表l
上,並捕獲任何拋出的值。因此,如果在列表中沒有負整數,g
返回應用到每個整數f
列表:
(%i3) g([1, 2, 3, 4]);
(%o3) [f(1), f(2), f(3), f(4)]
而且如果在列表中的負整數,則g
漁獲第一個這樣的整數,並返回。
(%i4) g([1, 2, -3, 4]);
(%o4) - 3
'return'會和'throw/catch'做同樣的事,不是嗎?從Maxima手冊:*通常由do語句返回的值是完成的原子。然而,函數返回可以用在body內部過早地退出do並給它任何期望的值。*'對於我通過10做print(「找到j =」,對於j通過10如果i = j則返回j));'似乎與'throw/catch'版本做同樣的事情。 – austinlorenz
如果你在'block'內部有'return(j)'(ie'for i thru 10 print print(「found j =」,for j through 10 do do if i = j then block(return(j)));' ),那麼它就不會有預期的效果了。如果你想走上這條路,就意味着你必須有一個返回值,或者你可以使用'block' - 我不認爲這是可行的。但我不得不承認'拋出'''catch'也是一種醜陋。 –
@LassiterRoofingTeam我想你可以寫'return(block(return(...)))' - 我編輯了我的答案來證明這一點。它仍然非常難看。 –