表达式与函数之间的差异

Dav*_*542 2 expression functional-programming function

表达式和函数之间的形式区别是什么?我通过观察就知道其中的区别,但我正在寻求对其的彻底理解。例如,显示来自Scheme或Python的一些示例:

; scheme
(display "hello")                          # expression
((lambda () (display "hello")))            # unnamed lambda
(define hi (lambda () (display "hello")))  # named lambda

# python
>>> print ('hello')          
>>> lambda: print ('hello')
>>> hi = lambda: print ('hello')
Run Code Online (Sandbox Code Playgroud)

在我的初步思考中,我认为差异是:

  1. 函数有一个名称并且可以被引用(尽管表达式可以分配给变量?)
  2. 函数可以带参数(表达式可以吗?)
  3. 函数可以具有作用域/封装并包含多个语句。

Sil*_*olo 6

您可能会在这里将苹果与橙子进行比较。表达式是一种语法形式。它是代码的一部分,描述了代码的解析方式。a + bprint(x)是表达式,但a, b, 和 也是表达式x。表达式通常由更小的表达式组成,通常有几层深。

另一方面,函数关心的是语义,而不是语法。这是一个运行时值。有人可能会说

lambda x: x + 1
Run Code Online (Sandbox Code Playgroud)

一个函数。为了完全正确,我想说这些字母解析为一个表达式,当由 Python 解释器计算时,会生成一个函数。但这太啰嗦了,所以我们通常会跳过中间人,只说 lambda一个函数。

将表达式分配给变量是没有意义的。如果我写x = 1 + 1,我不会将表达式 1 + 1分配给变量。我将计算一加一的结果分配给该变量。另一方面,如果我写x = lambda: 2,那么我实际上是将一个函数分配给变量x。函数在运行时存在;表达式纯粹是一个解析结构。

  • 在许多语言中,您当然可以将表达式分配给变量,例如在 R 中:`x <- quote(1+1)`。这种“语言编程”或“非标准评估”在许多情况下都很有用 (2认同)