lambda

lambda

 

 

 

 

lambda

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

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

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

 

lambda term

 

一个有效的lambda表达式被称为lambda term。

规则:

一个变量x,那么它自己(x)就是一个有效的lambda term;

如果t是一个lambda term,并且x是一个变量,那么(λx.t)也是一个lambda term(被称为lambda abstraction)。

如果t和s都是lambda term,那么(ts)也是一个lambda term(被称为application)。

 

怎么去理解application, 可以理解为“apply”:如Java中java.util.function.Function定义:

R apply(T t);

 

public class Fx implements Function<String, String> {

    public String apply(String s) {
        return s;
    }
    
}

  

Fx fx = new Fx();
fx.apply("this is input");

 

javascript的例子:

function fx(x) {console.log(x); return x;}; 

fx.apply(this, ["this is input"]);

this is input
"this is input"

 

 

这样也能调用到:

function fx(x) {console.log(x); return x;}; 

fx.apply("this is input", ["this is actual input"]);

this is actual input
"this is actual input"

  

 

function fx(x) {console.log(x); return x;}; 

fx.apply(null, ["this is actual input"]);

this is actual input
"this is actual input"

 

function fx(x) {console.log(x); return x;}; 

fx.apply(undefined, ["this is actual input"]);

this is actual input
"this is actual input"

 

 

 

function fx(x) {console.log(x); return x;}; 

fx.call(this, "this is input");

this is input
"this is input"

 

 

例如:

(def size 48)

它定义了一个变量size, 对应规则1,那么变量size就是一个有效的lambda term。

定义了一个变量,对应规则2:(λx.t),抽象为:绑定变量x到t, 也就是将48绑定到size上。那么(def size 48)整个是一个lambda term。

 

Lambda表达式

Lambda表达式由:

一组变量v1,v2,…,vn,…

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

圆括号’()’

 

 

 

 

 

Lambda表达式集合(Λ,可以归纳定义为:

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

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

3、如果M,N包含于Λ,那么(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表达式

α变换

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

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

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

 

Lambda表达式

β归约

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

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

 

Lambda表达式

表现形式

Java在1.8后支持Lambda, Lambda表达式表现形式:

private static void usage() {
        new Thread(() -> System.out.println("Java8 Lambda expression")).start();
}

 

 

它体现在() -> System.out.println("Java8 Lambda expression")对应(λx.t),其中()表示输入(x), System.out.println("Java8 Lambda expression")表示将输入的(),也就是x,替换为System.out.println("Java8 Lambda expression"),这个过程就是β-reduction。

 

 

interface Plus {
public int invoke(int x, int y);
}
 
 
private static void add() {
int x = 10;
int y = 30;
Plus xpy = (xx, yy) -> xx + yy;
System.out.println(xpy.invoke(x, y));
}

 

 

λ 演算

 

λ 演算(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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值