如何输入两个数字并在SML-NJ中输出它们的总和

时间:2015-12-09 12:21:57

标签: sml smlnj

我想编写一个示例程序,输入用户输入的两个数字,并在SML-NJ中输出它们的和作为输出。这两个数字应该是整数,每个整数将以新行给出。保证输入为整数类型,无需检查。我已经安装了SML-NJ编译器,我正在使用ml-build命令进行编译。

1 个答案:

答案 0 :(得分:2)

由于您没有指定您想要输入的数字类型,如何从输入中提取数字,或者在发生任何错误时应该发生什么,我将假设整数,每行一个整数,如果发生任何错误,都不会发生任何事情。

fun getInt () =
    (case TextIO.inputLine TextIO.stdIn of
          NONE => NONE
        | SOME s => (case Int.fromString s of
                          NONE => NONE
                        | SOME n => SOME n))

fun getTwoInts () =
    (case getInt () of
          NONE => NONE
        | SOME i => (case getInt () of
                          NONE => NONE
                        | SOME j => SOME (i,j)))

fun sumAndPrintTwoInts () =
    (case getTwoInts () of
          NONE => ()
        | SOME (i,j) => print (Int.toString (i+j)))

但是有很多方法可以构建这些功能。例如,

infix 3 >>=
fun NONE >>= _ = NONE
  | (SOME a) >>= f = f a

fun getInt () =
    TextIO.inputLine TextIO.stdIn >>= Int.fromString

fun getTwoInts () =
    getInt () >>= (fn i =>
    getInt () >>= (fn j => SOME (i,j)))

fun sumAndPrintTwoInts () =
    getTwoInts () >>= (fn (i,j) => (print (Int.toString (i+j)); NONE))