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.
此外,来自then
和else
表达式的类型必须统一 - 这将是整个if-then-else
构造的类型.
也就是说,if-then-else
在SML中就像?:
C语言中的ternary()运算符,它也共享这种"限制".它不等同if
- 仅对其分支进行评估的语句.
1并非所有类似功能的语言都需要显式then
表达式,有些语言默认为特定值.但是,这就是它在SML中的工作原理,因为不需要任何特定类型的"默认值",因此必须统一结果类型.