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 ...
随机推荐
- [UE4]声音系统概述
一.只能使用wav格式的声音 二.wav声音可以直接播放到打开的UE4编辑器内打开的Content文件夹.也可以直接导入 三.在Content中的文件夹的声音资源可以直接拖放到场景中,会以3D场景声音 ...
- SSH配置文件详解
SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能. 在RHEL系统中SSH使用的是OpenSSH服务器,由opensh,openssh-server等软件包提供的. sshd ...
- tf.nn.embedding_lookup
tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True, max_ ...
- cas client
(The client and server are the same thekeystore) cas client version: 3.5.1(cas-client-core-3.5.1) gi ...
- HBase原理和安装
HBase的基本概念和安装: Hbase简介 HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储. 官方网站 ...
- Java动手及实验整理
1 枚举类型 在Java中,枚举类型本质上其实就是一个类,枚举中的常量都是该枚举类型的实例.枚举类型是引用类型!枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象 ...
- 洛谷 P2629 好消息,坏消息
题目描述 uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一旦老板 ...
- api文档管理系统合集
1.Swagger 2.Showdoc 3.EOAPI 4.阿里的RAP 5.postMan 6.docute: 无需编译的文档撰写工具 7.SmartWiki 接口文档在线管理系统 8.SosoAp ...
- 【Selenium-WebDriver自学】Selenium环境安装设置(九)
==================================================================================================== ...
- 使用NetBox实现ASP网页封装为EXE教程
简单的形容就是把ASP文件打包 成一个EXE文件,并且不需要在调试的机器上安装IIS即可正常调试.如果按照说明书来操作的话,观看比较繁琐,本人为方便大家使用,现制作一个简单的使用教程. 封装过程 1. ...