Lambda calculus and Lambda function
本文不是想具体的探讨 lambda 演算相关的问题。
思路来源:吃饭的路上突然讨论到了 lambda 演算和 Python 中的 lambda expression,我也突然懵逼 Python 中的 lambda expression 是不是 lambda 演算中的相关概念。
先给出结论:Python 中的 lambda expression 和 lambda calculus 的概念相关性并没有那么大。在 Python 中的 lambda expression 更多的是充当 anonymous function 的语法糖,只是为了方便而使用的。匿名表达式则是借助于 lambda 演算时的一些概念。
Lambda Calculus
Lambda calculus 的概念远远比 Python 这门语言出现的时间要早,Lambda calculus 的讨论甚至可以追溯到 1920 年代,是用来进行逻辑演算的一个基本工具。
Lambda calculs 的概念听上去非常的玄乎:“ a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution.”
进行 Lambda 演算的方法也很简单:构造 lambda 项,然后对他们进行 reduction。(reduction 不好翻译,可以理解为归约或者化简)
构造最小的 Lambda 演算,只有三个部分:
- 定义变量:定义一个变量,可以表示逻辑上的值。
- 定义函数:定义一个函数法则,对于函数的参数,则受到了函数的约束。
- 求函数:相当于对函数进行求解。
只用这三个部分,就可以完成最小的 lambda 演算系统的定义。
而对于归约法则,只需要两条法则。
- α-conversion 变量重命名:在谓词演算部分,我们称为替换法则。
- β-reduction 函数中的变量代入:在谓词演算部分,可以理解为代入法则。
Python 中的 Lambda expression
Python 中的 lambda expression 则是一个语法糖,他可以匿名的定义一个函数而不需要显示的声明函数名。Python 的设计也有借助了 Lambda Calculus 的一些概念,比如变量绑定,还比如函数可以当作是变量传递。这些在比较老派的语言中都是没有的。
Lambda Expression 的语法规则如下:
lambda
其中 lambda 属于 keyword,是必不可少的,valist 可以为空,但 expression 不能为空。
我们也可以只使用 Python 中的 lambda 表达式,构建一个完整的 lambda 演算。http://matt.might.net/articles/python-church-y-combinator/