




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Meta LanguageML,组员:郭书彤 李晓旭 宋怡爽 张盼,-1-,ML介绍,1. ML简介 2. ML标准类型 3. ML标准函数 4. ML函数定义 5. ML类型,-2-,1. ML简介,1.1 ML的产生 1.2 ML的特点 1.3 ML的交互会话和运行时环境,-3-,1.1 ML的产生,ALGOL国际代数语言 LISP语言(全名List Processor,即表处理语言)。,-4-,1.1 ML的产生,ALGOL国际代数语言 LISP语言(全名List Processor,即表处理语言)。,-5-,1.1 ML的产生,ML 是一个通用的函数式编程语言,它是由爱丁堡大学的Rob
2、in Milner等人在二十世纪七十年代晚期开发的。 目前ML有两个发展分支:Standard ML和Caml。 Standard ML是标准ML,简称为SML。 ML是一种强类型函数程序设计语言(强类型:变量有且只有一种类型)。它拥有自然的语法和较少的基本概念,其理论基础是演算。,-6-,1.2 ML的特点,ML的特色: 模式匹配 (pattern matching) 意外处理(exception handling) 类型引用(type inference) 多态性(polymorphism) 递归数据结构(Recursive data structure),-7-,1.2 ML的特点,ML
3、的 类型系统 对程序结构的好处: 类型减少了指针的使用 类型提供了灵活的表达方式 类型有助于管理复杂的对象 整数二叉树例子 Pascal语言:,-8-,ML语言,datatpye Tree=empty| node of int * int * Tree * int Tree;,1.3 ML的交互会话和运行时环境,很多ML编译器循环地进行“输入-求值-输出”,用户标准的操作方式是一条一条地输入ML表达式或者声明,让ML编译器去处理。处理的过程包括:类型检查、编译、执行。如果一个标志符被赋值,他就成为一个变量,后续的语句都可以使用这个变量。 在这里,为了便于说明问题,在以后的叙述中,我们假定有一个
4、交互式的SML系统。每当我们在系统提示符“-”之后输入以;结尾的语句,系统都将给以回答,如下所示: 当输入表达式,回答部分包括两部分: :,-9-,2. ML标准类型,类型是SML语言的一个中心环节。所有的对象都有其类型。这些类型不一定要显示说明,但必须能被静态推导出来。所谓静态推导就是说在编译时该类型能够被编译器根据上下文推算出来。 SML提供了几个标准类型: 单元 (unit)、布尔型(bool)、整型(integer)、字符串型(string)、实数(real)、元组(tuple)、记录(record)、列表(list) SML还提供了定义新的类型的机制,-10-,2. ML标准类型,2
5、.1 单元类型 单元类型只包含一个元素,用空的括号表示。 和C语言中的void类型一样。 2.2 布尔类型 布尔类型,标识符是bool,包含两个值 true ,false。 true:bool false:bool,-11-,2. ML标准类型,2.3 整型 整型的标志符是int,负号用“”表示。例如: 2.4 字符串类型 字符串的写法是双引号间的字符序列,例如:,-12-,2. ML标准类型,2.5 实数型 ML的浮点数类型叫实数(real),规定用十进制。,-13-,2. ML标准类型,2.6 表类型 在SML中,一个表必须包含相同类型的元素,并且以空表结尾(可以略去不写)。 表中的元素之
6、间以“,”分隔,整个表用括起来。 空表写作或nil。 表的类型表达式取决于表的元素类型,写作: list 表可以嵌套,-14-,2. ML标准类型,2.7 元组类型 在ML中元组是可以包含任意类型数据元素的定长序列。 元组的写法是圆括号中用逗号分隔的数据元素,允许嵌套。 元组的每个元素的类型用*间隔开并排列在一起,就是元组的类型表达式。,-15-,2. ML标准类型,2.8 记录类型 类似于C中的结构类型,可以包含不同类型的元素。 给每一个元素起一个名字。 记录的值和类型的写法都用括起来。 例子: - First_name=“李”,Last_name = “元芳”; First_name=“李
7、”,Last_name = “元芳”: First_name:String;Last_name:String,-16-,2. ML标准类型,元组、列表、记录,-17-,2. ML标准类型,2.9 函数的类型和表达式 函数以一定的规则将定义域上的值映射到值域上去。 在SML语言中,一个函数的类型是由它的定义域类型和值域类型共同来描述的: 注:-表示定义域到值域的映射。 例子: - fn division(x,y) = x div y; fn:(int*int) - int,-18-,3. ML标准函数,在SML中,运算符(操作符)就是函数,例如加法运算符就是加法函数。 3.1 标准布尔函数 3.
8、2 标准算术运算函数和运算符的重载 3.3 标准字符串函数 3.4 标准表函数 3.5 字符、字符串和表 3.6 比较运算符 3.7 元组、记录运算符,-19-,3.1 标准布尔函数,有三种运算: 函数的类型: not: andalso和orelse:,-20-,3.1 标准布尔函数,例子: 注意: 在表达式(a andalso b)中a先被计算,只有当a为真的时候才会判断b。 尽管andalso和orelse是两个中缀运算符,但是这两个函数还是被认为是以一个二元组为参数的。,-21-,3.2 标准算术运算函数和运算符的重载,标准算数运算函数有:,-22-,3.2 标准算术运算函数和运算符的重
9、载,运算符重载(operator overloading): 把同一运算符作用在不同类型上的做法。如负运算符()加法(+)减法(-)乘法(*),标准的ML系统无法显示其类型,因为它们被重载了。 例如: 类型:fn:(int * int )int fn:(real * real)real 我们用一个虚构的类型num来描述包括整数和实数的统一的“数”,所以上面的运算符类型可以写作:,-23-,- 6*7; 42:int,- 3.5*2.0; 7.0 :real,- +; +:?,3.2 标准算术运算函数和运算符的重载,注意:在以上能够重载的运算符的两边必须同为整数或同为实数。否则编译器会报错,也即是说: (int * re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油气勘探与开发地质资料立卷归档规则
- 企业培训曝光教程课件
- 油库仪表自动化控制系统
- 英语五年级上册《A camping trip》教案
- 矿业开采权转让与采石场合作合同
- 餐饮企业劳动合同管理及争议解决策略
- 路灯损坏措施方案
- 公司银行还款方案
- 跨境电商企业跨境资金链管理服务合同
- 厨房人员统筹方案
- 2025至2030中国工业设计行业现状动态与未来前景展望报告
- 矿山融资居间合同协议
- 数智化背景下“知识图谱CDIO”混合式教学模式研究
- 天猫养车加盟合同协议
- 2025年乡村全科助理医师助理医师资格证考试必刷题库(500题)
- GB/T 45448-2025再生变形高温合金原料
- 景区抽成合同协议
- 网络安全知识手册
- 铁路公司质量管理制度
- 物业公司接管公寓楼项目工作时间倒推计划表(T日为入驻日)
- DB1304T 500-2025民用水表、电能表、燃气表计量纠纷处理规范
评论
0/150
提交评论