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 演算,只有三个部分:

  1. 定义变量:定义一个变量,可以表示逻辑上的值。
  2. 定义函数:定义一个函数法则,对于函数的参数,则受到了函数的约束。
  3. 求函数:相当于对函数进行求解。

只用这三个部分,就可以完成最小的 lambda 演算系统的定义。

而对于归约法则,只需要两条法则。

  1. α-conversion 变量重命名:在谓词演算部分,我们称为替换法则。
  2. β-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/

猜你喜欢

转载自www.cnblogs.com/wAther/p/12113874.html