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]HitResult中各项数值的含义
对于“LineTraceByChannel”来说: Blocking Hit:是否击中了物体 Initial Overlap: Time: Distance: Location(击中的位置)等于Imp ...
- centos7 安装pip+python3.6
centos7安装pip 1.执行:yum install python-pip 若没有python-pip包,先执行:yum -y install epel-release,再执行yum insta ...
- Calling async method synchronously
https://stackoverflow.com/questions/22628087/calling-async-method-synchronously/22629216#22629216 ht ...
- java中原生的发送http请求(无任何的jar包导入)
package com.teamsun.pay.wxpay.util; import java.io.BufferedReader; import java.io.IOException; impor ...
- KafkaAPI实战
新旧API使用 Flume和Kafka集成: Kafka有两套API: 过时的API 和新API 准备工作 <dependencies> <dependency> <gr ...
- django,flask接口初试
-------------django 1.需要安装的环境 pip install django pip install djangorestframework ## restful组件 pip in ...
- 外网访问内网的FTP服务器-原理解析
1. 背景简介 最近研究如何在内网搭架FTP服务器,同时要保证外网(公网)能访问的到.终成正果,但走了一些弯路,在此记下,以飨后人. 2. 基础知识 FTP 使用 2 个端口,一个数据端口和一个命令端 ...
- pycharm中快捷键的使用
转载自:https://blog.csdn.net/fighter_yy/article/details/40860949 Alt+Enter 自动添加包 shift+O 自动建议代码补全 Ctrl+ ...
- centos7安装mysql 8
1.查看已有mysql(包括mariadb) rpm -pa | grep mariadb yum list installed | grep mariadb rpm -pa | grep mysql ...
- django 之admin使用
Admin注册 内容发布的部分由网站的管理员负责查看.添加.修改.删除数据,开发这些重复的功能是一件单调乏味.缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块. 1)准备工作 ...