2013-03-05 174 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