lambda

lambda

 

<!--[if !supportLists]-->       <!--[endif]-->λ(Lambda)

<!--[if !supportLists]-->       <!--[endif]-->λ 演算(Lambda calculus)

 

lambda

在计算机编程语言中,如LispPythonRuby λ是一个算子,用于表示匿名函数或者闭包,后跟λ演算的用法。

C#编程语言中,一个λ表达式是一个包含表达式和语句的匿名函数。

λ语言是一种基于组合逻辑的函数式编程语言,一个简单化的λ演算并不包含λ所有的内容,

 

Lambda表达式

Lambda表达式由:

一组变量v1v2vn

抽象符号lambda ‘λ以及点’.’

圆括号’()’

一组Lambda表达式,Λ,可以归纳定义为:

1、如果x是一个变量,那么x包含于Λ

2、如果x是一个变量,并且M包含于Λ,那么(λx.M)包含于Λ

3、如果MN包含于Λ,那么(M N)包含于Λ

规则2的实例称为抽象(abstractions),规则3的实例称为具体(applications)

 

Lambda表达式

标记法

为了使Lambda表达式的标记法变得整洁,以下变换经常被应用:

最外面的圆括号被去掉:使用M N代替(M N)

具体(Applications)被假定为左关联:M N P可写为((M N) P)

抽象体扩展延伸为尽可能最右关联: λx.M N表示λx.(M N)而非(λx.M) N

抽象序列被缩写: λx.λy.λz.N 可缩写为λx.y.z.N

释放和绑定变量

归约

Lambda表达式的意义被定义为怎么对表达式进行归约

有三种方式:

α变换(α-conversion) 改变绑定变量 (alpha)

β归约(β-reduction) 将函数应用到参数上 (beta)

η变换(η-conversion) 关注外延性概念 (eta)

 

Lambda表达式

<!--[if !supportLists]-->       <!--[endif]-->α变换

α变换 α-conversion Alpha-conversion  有时候也被称为alpha-renaming

α变换允许改变绑定变量名

λx.x可能产生λy.y.

 

Lambda表达式

<!--[if !supportLists]-->       <!--[endif]-->β归约

β归约(β-reduction Beta-reduction 也可以叫做β消解

β归约规则表达的是函数作用的概念。

 

Lambda表达式

<!--[if !supportLists]-->       <!--[endif]-->表现形式

Java1.8后支持Lambda Lambda表达式表现形式:

private static void usage() {

        new Thread(() -> System.out.println("Java8 Lambda expression")).start();

}

 

<!--[if !supportLists]-->       <!--[endif]-->interface Plus {

<!--[if !supportLists]-->       <!--[endif]-->public int invoke(int x, int y);

<!--[if !supportLists]-->       <!--[endif]-->}

<!--[if !supportLists]-->       <!--[endif]-->private static void add() {

<!--[if !supportLists]-->       <!--[endif]-->int x = 10;

<!--[if !supportLists]-->       <!--[endif]-->int y = 30;

<!--[if !supportLists]-->       <!--[endif]-->Plus xpy = (xx, yy) -> xx + yy;

<!--[if !supportLists]-->       <!--[endif]-->System.out.println(xpy.invoke(x, y));

<!--[if !supportLists]-->       <!--[endif]-->}

 

λ 演算

 

λ 演算(Lambda calculus)完全等价于图灵机,也就是说, λ 演算是图灵机完备的,它是一个通用的计算模型,可以用来模拟任何用单个胶带或磁盘录下来的图灵机。

Lambda(希腊字母λ)用于Lambda表达式(lambda expressions)lambda terms用于在函数中表示一个变量绑定。

λ 演算可能是typed或者untyped

typed λ 演算中,函数可以被应用于

 

<!--[if !supportLists]-->       <!--[endif]-->https://en.wikipedia.org/wiki/Lambda_calculus

<!--[if !supportLists]-->       <!--[endif]-->https://en.wikipedia.org/wiki/Lambda_calculus_definition

 

猜你喜欢

转载自lobin.iteye.com/blog/2323034