如何在let语句中使用if语句?

时间:2013-03-05 17:04:04

标签: sml

我希望这可以工作:

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

但似乎你不能宣布这样的价值......我该怎样做才能使它发挥作用?

2 个答案:

答案 0 :(得分:4)

ML中的if语句是表达式。这意味着它必须具有价值。请记住,SML中的值声明如下所示:

val <name> = <expression>

由于if ... then ... else语句是一个表达式,您可以放在=的右侧。

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

另一件事。请记住,valOf可能会出错。在输入上使用它几乎要求你的程序崩溃,因为用户可以键入任何内容。

答案 1 :(得分: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

通过这种方式,您可以覆盖用户无法输入数字,但不能输入任何内容或根本不输入任何内容的情况。