Voo*_*Voo 4 language-agnostic procedural-programming functional-programming
在函数式语言(实际上我用过的所有函数式语言)中,语句和表达式之间没有区别,每个代码块的最后一个值是块的"返回值".另一方面,通常不被认为是纯粹功能的语言通常会引入这种区别.
作为我正在谈论的一个例子,以下python代码打印None
:
def foo():
5 + 5
print(foo())
Run Code Online (Sandbox Code Playgroud)
而方案代码打印 10
(define (foo) (+ 5 5))
(display (foo))
Run Code Online (Sandbox Code Playgroud)
显然,我对那些喜欢一种风格的人的主观答案不感兴趣,而是客观原因.
对我而言,这种区别似乎使得语言的语法和实现更加复杂(一个不那么明显的例子就是模板和void类型的c ++标准中的必要例外,或者引入了"快捷方式if语句",比如?
c - 受影响的语言)没有真正的好处 - 但很可能有一个原因,即使是新的现代语言仍然有这种区别.
无处不在的副作用.
如果你是一个纯粹的功能语言,一切都是表达.即使是"陈述"也会返回类似的东西()
(可能因其类型而异,例如IO ()
.
但是,大多数编程语言默认允许在任何地方或任何地方使用效果,因此排序成为关键,因此您可以使用特殊语法来为计算机排序语句,通常用分号分隔.
纯表达式不是这种情况,纯表达式可以按任何保留表达式语义的顺序进行计算.
副作用动作被认为是特殊的表达式,它们可以获得特殊的语法.