2012-10-21 136 views
0

假設我有一個函數在滿足給定條件時返回某個值,並且在條件不滿足時不返回任何值。如何在不返回值的情況下退出函數

例如

樂趣富(N)=如果n < 100000則n否則(像退出功能。我們有它在其他編程語言。我們有這樣的事情嗎?)

我最初想寫( )但它表示在兩種情況下如果或某物不匹配。

爲了更加明確,我想編寫一個函數,該函數接受一個數字,任意數字,如果它是有效整數,則將它合併到一個列表中,如果它不是整數,則將其忽略。

回答

5

在SML中,函數總是必須返回值1。表示可能有或沒有有用結果的函數的一種方法是使用OPTION類型。使用OPTION如果函數返回有用的東西,則返回SOME value;否則返回NONE

對於您的特定用例,另一種替代方法是將該列表作爲第二個參數,然後將結果添加到列表或列表中,但不更改。

¹事實上,我不知道任何允許非void函數不返回值(不調用未定義行爲)的語言。在某些語言中,您可以返回null代替正確的返回值,但在大多數語言中,返回類型爲int的函數不允許。無論哪種方式SML沒有空值。

1
fun foo n = if n < 1000000 then SOME n else NONE 

當心,你不能使用富ñ直接作爲一個整數,但你必須使用isSome和valOf或模式匹配知道在這種情況下,你是。

也許最好將您的列表作爲參數傳遞並將值附加到它。

fun foo (n: int, xs: int list) = 
    if n < 1000000 then n :: xs else xs 
相關問題