在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;
答案 0 :(得分:5)
else ()
值()
是unit
类型的唯一居民。它使得整个if-then-else结构的类型很好,因为then
分支也有类型unit
。
最后,在某些ML变体中,if e1 then e2
可用作if e1 then e2 else ()
的快捷方式,但不能用作SML。