2013-03-05 110 views
1

我想這個工作:如何在let語句中使用if語句?

fun function (i) = 
    let 
     if i = 1 then 
      val h = valOf(Int.fromString(valOf(TextIO.inputLine TextIO.stdIn))) 
     else 
      val h = someFunction(); 
    in 

     code... 
    end 

但好像你不能聲明那樣的價值......我應該怎麼做才能讓工作?

回答

4

ML中的if聲明是一個表達式。這意味着它必須具有價值。請記住,在SML值聲明如下所示:

val <name> = <expression> 

由於一個if ... then ... else語句是一個表達式,你可以把在=的右側。

fun function i = 
    let 
    val h = if i = 1 then ... 
        else ... 
    in 
    ... 
    end 

另一件事。請記住,valOf可能會出錯。在輸入中使用它幾乎要求您的程序崩潰,因爲用戶可以鍵入任何內容。

+0

你會用什麼來代替valOf呢?我可以處理以某種方式提出的豁免選項嗎?就像在if .. else語句中一樣? – theva 2013-03-06 07:24:29

+0

我可能會使用模式匹配。 – Tayacan 2013-03-22 14:54:51

1

如何:

fun function(i)= 
    let 
     fun nextInput() = 
      case (TextIO.inputLine TextIO.stdIn) of 
       NONE => 0 
       | SOME s => case Int.fromString(s) of 
          NONE => 0 
          | SOME n => n 

     val h = if i = 1 then nextInput() else someFunction() 
    in 
     code... 
    end 

這樣,你覆蓋在其中,用戶可以不輸入數字的情況下,但別的什麼,或者什麼都沒有。

+0

我會試試! – theva 2013-03-06 07:27:41