如何做什么"什么都不做"在SML中if条件的其他部分

时间:2013-01-06 09:07:44

标签: sml smlnj

在SML中,我必须使用else部分,因为这些是语言的规则。

如何在else条件下什么都不做?

fun calc(input : string ) : int =

    let
      val outStr = ref "someString"
      val outInt = ref 0
    in
      outInt := (validateHelper(input) handle _ => ~1);
      if (outInt <> ~1) 
         then
            (  outStr := replaceRomanDec(input);       (* replace roman number with decimal *)
               outInt := (calcMyRomanExpression(!outStr) handle _ => ~1);
            )
         else (* nada *)

      !outInt
    end;

1 个答案:

答案 0 :(得分:5)

else ()

()unit类型的唯一居民。它使得整个if-then-else结构的类型很好,因为then分支也有类型unit

最后,在某些ML变体中,if e1 then e2可用作if e1 then e2 else ()的快捷方式,但不能用作SML。