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))
Haskell语言学习笔记(79)lambda演算的更多相关文章
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- Haskell语言学习笔记(78)fix
fix 函数 fix 是一个在 Data.Function 模块中定义的函数,它是对于递归的封装,可以用于定义不动点函数. fix :: (a -> a) -> a fix f = let ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
- Haskell语言学习笔记(44)Lens(2)
自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...
- Haskell语言学习笔记(38)Lens(1)
Lens Lens是一个接近语言级别的库,使用它可以方便的读取,设置,修改一个大的数据结构中某一部分的值. view, over, set Prelude> :m +Control.Lens P ...
- Haskell语言学习笔记(92)HXT
HXT The Haskell XML Toolbox (hxt) 是一个解析 XML 的库. $ cabal install hxt Installed hxt-9.3.1.16 Prelude&g ...
随机推荐
- 00014 - linux中用top、ps命令查看进程中的线程
在Linux上显示某个进程的线程的几种方式. 方法一:PS 在ps命令中,“-T”选项可以开启线程查看.下面的命令列出了由进程号为<pid>的进程创建的所有线程. 1.$ ps -T -p ...
- 贪吃蛇 v1.01
1.长度二节:2.如果触及屏幕边缘,游戏结束: 感谢张瑞阳同学改进 #include<bits/stdc++.h>#include<windows.h>#include< ...
- 在Docker中安装配置Oracle11g并实现数据持久化
1.拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像详情:https://dev.aliyun.com/ ...
- Hibernate的hql语句save,update方法不执行
Hibernate的hql语句save,update方法不执行 可能出现的原因问题: 未进行事务管理 需要进行xml事务配置或者注解方式的事务配置
- linux设置服务器时间同步
yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...
- three.js学习:点光源+动画的实现
与前几个教程类似,场景和相机等设置就不再重复声明了.这里只列出新学的内容. 1.圆柱体(圆锥体)的初始化 function initObject() { var geometry = new THRE ...
- java开发_""和null的区别
转自:http://www.cnblogs.com/hongten/archive/2012/11/08/java_null.html#undefined 在代码中: 1 //name可以为" ...
- python学习之----深网和暗网
深网是网络的一部分,与浅网(surface Web)对立.浅网是互联网上搜索引擎可以抓 到的那部分网络.据不完全统计,互联网中其实约90% 的网络都是深网.因为谷歌不 能做像表单提交这类事情,也找不到 ...
- jquery 弹框,确定、取消
function del(id, url) { var bool = confirm("确定删除?") if (bool) { //点击确定后操作 var Urls = " ...
- C# .NET Web Api 保存Session
Global.asax中添加: public override void Init() { this.PostAuthenticateRequest += (sender, e) => Http ...