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

Sml 如何在let语句中使用if语句?,sml,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 但似乎你不能声明这样的值。。。如果ML中的语句是一个表达式,我应该如何使

我希望这能起作用:

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

但似乎你不能声明这样的值。。。如果ML中的语句是一个表达式,我应该如何使它工作?

一个
。这意味着它必须有一个值。记住,SML中的值声明如下所示:

val <name> = <expression>

还有一件事。请记住,
valOf
可能出错。在输入时使用它几乎会让程序崩溃,因为用户可以输入任何内容。

如果ML中的
语句是表达式,则
语句。这意味着它必须有一个值。记住,SML中的值声明如下所示:

val <name> = <expression>
还有一件事。请记住,
valOf
可能出错。在输入时使用它几乎会导致程序崩溃,因为用户可以输入任何内容。

这样如何:

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
通过这种方式,您可以涵盖用户可能不输入数字,但输入任何其他内容,或根本不输入任何内容的情况。

这一点如何:

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

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

您会使用什么来代替valOf?我能以某种方式处理提出的exeption选项吗?就像在一个假设中。。else语句?我可能会使用模式匹配。你会用什么来代替valOf?我能以某种方式处理提出的exeption选项吗?就像在一个假设中。。else语句?我可能会使用模式匹配。