为什么SML不允许if-then而不是其他?

Ala*_*amu 2 functional-programming sml conditional-statements

在标准ML中,将if-then-else作为单个表达式并且仅允许if-then而不使用else子句的原因是什么?

是否可以在没有else子句的情况下在SML中编写条件语句?

use*_*740 10

标准ML程序是表达式,而不是语句.

标准ML是一种功能性编程语言,具有一些不纯的功能.用标准ML编写的程序包含要评估的表达式,而不是语句或命令[在C语言中找到].

因此,因为if-then-else表达式,所以它必须求值为一个值.如果else不需要,那么如果条件失败,表达式将实际上"没有值" - 但是通过定义表达式,它必须具有值.要求明确else确保表达式将在两种情况下评估为值1.

此外,来自thenelse表达式的类型必须统一 - 这将是整个if-then-else构造的类型.

也就是说,if-then-else在SML中就像?:C语言中的ternary()运算符,它也共享这种"限制".它等同if- 对其分支进行评估的语句.


1并非所有类似功能的语言都需要显式then表达式,有些语言默认为特定值.但是,这就是它在SML中的工作原理,因为不需要任何特定类型的"默认值",因此必须统一结果类型.

  • 我认为"然而,这只是它在SML中的工作原理"基本上是你的答案归结为.OCaml与SML一样功能.但是它允许你省略`else`子句. (2认同)