Haskell语言学习笔记(79)lambda演算

lambda演算

根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。

lambda项

lambda演算由 lambda 项的语言构成。基本的 lambda 项只包含以下三种:

语法名称描述Haskell语言中的相应表述
a变量表示参数或数学/逻辑值的字符或字符串a
(λx.M)抽象化函数定义(M是一个lambda项)。
变量x在表达式中已被绑定。
(\x -> M)
(M N)应用将函数应用于参数。 M 和 N 是 lambda 项。(M N)

* 作为 lambda 项的变量无须声明
* lambda 抽象化是一种匿名函数的定义。
* lambda 应用即函数调用。
* 括号可以改变语义。
λx.((λx.x)x)的含义是\x -> ((\x -> x) x),即整体是一个函数定义。
(λx.(λx.x))x的含义是(\x -> (\x -> x)) x,即整体是一个函数应用。
两者的最终结果都是(λx.x),即(\x -> x),但是语义不同。

lambda演算
(λf.f 3)(λx.x+2) = (λx.x + 2) 3 = 3 + 2
(λx.λy.x - y) 7 2 = (λy.7 - y) 2 = 7 - 2

Haskell
(\f -> f 3)(\x -> x+2) = (\x -> x + 2) 3 = 3 + 2
(\x -> \y -> x - y) 7 2 = (\y -> 7 - y) 2 = 7 - 2

Ω 与 Y 组合子

ω := λx.x x
Ω := ω ω
Y := λg.(λx.g (x x)) (λx.g (x x))

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值