1

我希望这个工作:

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

2 回答 2

6

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

val <name> = <expression>

由于if ... then ... else语句是表达式,因此您可以将=.

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

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

于 2013-03-05T17:49:28.347 回答
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

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

于 2013-03-05T21:09:26.517 回答