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 に答える