# 1 目标与选题动机
## 1.1 目标
课程中总共安排了三次实验,实验目标和具体验证的知识点如下:
### 1.1.1 第一次实验
实验的总体目标是:
(1)熟悉SML/NJ开发环境及使用;
(2)掌握SML基本语法和书写规则;
(3)SML简单程序设计和程序编写
具体的,实验中验证的知识点包括:
(1)SML是强类型语言,不同数据类型不可以进行运算;
(2)字符串类型没有+操作符,要用^操作符拼接;
(3)形如x = 1的表达式不是给x赋值,而是一个布尔值;
(4)要使用变量前需先进行绑定;
(5)元组中元素数据类型可以不同,列表中元素数据类型必须相同;
(6)掌握函数的递归写法和对列表的处理;
(7)掌握基本的模式匹配和临界情况处理;
(8)函数之间可以相互调用。
### 1.1.2 第二次实验
实验的总体目标是:
(1)掌握list结构的ML编程方法和程序性能分析方法;
(2)掌握基于树结构的ML编程方法和程序性能分析方法。
具体的,实验中验证的知识点包括:
(1)与list相关的运算符的使用,比如::符号是取表中元素,@符号是表的拼接;
(2)作用域限定let-in-end的使用,在let之后in之前赋值的变量只在in之后end之前有效;
(3)掌握递归函数结构的分析,并能够通过判断运行次数来确定时间复杂度;
(4)掌握list结构的遍历、插入排序和归并排序算法;
(5)掌握tree结构的遍历、插入排序和归并排序算法;
(6)掌握使用datatype进行树结点类型定义;
(7)掌握包含并行递归过程的函数的性能分析,从work和span两个角度分析;
(8)掌握二分搜索算法的实现。
### 1.1.3 第三次实验
实验的总体目标是:
(1)掌握多态类型、option类型和高阶函数的编程方法;
(2)用ML语言求解实际问题。
具体的,实验中验证的知识点包括:
(1)高阶函数,将函数作为参数传递;
(2)对列表中所有元素使用同一函数进行作用的mapList函数;
(3)掌握用高阶函数实现mapList的方法;
(4)掌握用柯里化函数实现mapList的方法;
(5)掌握将数据包装为option类型的方法;
(6)掌握找零问题的解决方法,并利用找零问题的思路求解类似问题。
## 1.2 选题动机
本次报告选取的两个主题方向分别是:
(1)函数式编程语言的家族成员及其简介;
(2)函数式编程的特点。
首先,选择调查和总结函数式编程语言的家族成员体系的原因是,我认为一种编程思想要代入实践就必须有这种思想的载体,而函数式编程语言恰恰就是将函数式编程引入实践的载体。因为语言是用来描述思想的工具,所以通过语言的发展可以看到函数式编程的发展,通过语言的特性也可以看到函数式编程的特性。此外,语言的发展是多元化的,除了在课程中学习的Standard ML之外,还有许多不同的函数式编程语言。例如函数式编程语言的理论基础基本都是λ演算,而后出现了以Lisp为代表的动态类型的函数式编程语言,以及以ML为代表的静态类型的函数式编程语言,以Lisp和ML为源头又各有许多方言,形成各自的家族体系。这么多的函数式编程语言的关系错综复杂,从这个角度来说,我也认为有必要对它们进行梳理。
然后,选择调查和总结函数式编程的特点的原因是,我在课程学习的过程中,一开始非常不习惯和不理解函数式编程的一些特性,一直使用命令式的思维去理解,感觉很多特性是“反人类”的,比如无法对list进行下标操作、没有循环结构、不能随意使用变量保存状态等。但随着学习的深入,逐渐可以理解这些特性在函数式编程中发挥的作用。在整个课程学习完之后,我认为有必要对这些有趣的特性进行一个总结,巩固自己对函数式编程思想的理解。
下面的第二章将围绕函数式编程语言的家族成员及其简介这一主题展开,主要根据静态类型和动态类型对函数式编程语言进行划分,并对一些较为主流的函数式编程语言的诞生、特点以及和其他语言之间的联系进行简要介绍。
下面的第三章将围绕函数式编程语言的特点展开,主要包括函数是第一等公民、多态类型、高阶函数、柯里化、无副作用、“无状态”和递归这些特点的介绍和举例。在介绍特点时会以课程中所学习的Standard ML语言为例,结合具体代码进行特点的分析,并会介绍这些特点所带来的一些好处。
# 2 函数式编程语言的家族成员及其简介
本章主要探讨函数式编程语言的分类,以及介绍各类型函数式编程语言中具有代表性的家族成员。
按照一般思路,可以从强类型/弱类型,静态类型/动态类型这两个维度来对函数式编程语言进行分类。但是我经过了解之后发现绝大多数的主流函数式编程语言均采用强类型的设计。弱类型的函数式编程语言不具有主流地位,例如法国数学家David Madore于1999年设计的Unlambda语言,由s、k、i三个符号(组合子)完成基本操作,语言形式非常有趣,但实际应用中很少使用。
因此下文所描述的较为主流的函数式编程语言均为强类型语言,下面主要按照静态类型和动态类型对它们进行分类介绍。同一类型中按照诞生年份的前后进行排序。
## 2.1 静态类型的函数式编程语言
静态类型的语言指的是在运行之前的编译阶段就进行类型检查,并确定变量的数据类型的一类语言。静态类型的较为主流的函数式编程语言如下。
### 2.1.1 ML
ML(Meta Language)由爱丁堡大学的Robin Milner等人在二十世纪七十年代晚期开发。ML并非纯函数式编程语言,因为它在一定程度上允许副作用和进行指令式的编程。同时ML具有函数式语言常有的惰性求值的策略,也具有多态、模式匹配、高阶、递归等特点。
ML具有非常好的灵活性,表达式的值可以是函数,这个值可以作为其他函数的参数,也可以作为其他函数的返回值。这个特点在本次课程学习Standard ML语言时,尤其在学习高阶、多态和柯里化等特性时体现非常明显。
目前ML语言家族具有两个较大的分支,一个是我们课程中所学的Standard ML(标准ML),另一个是Caml。本次课程中使用的是Standard ML最著名的编译器Standard ML New Jersey(SML/NJ)。Caml的具体实现是Ocaml语言,详见本节的第2.1.4小节的介绍。
### 2.1.2 Miranda
Miranda是由英国学者大卫·特纳(David Turner)所设计的纯函数式编程语言,其同样具有惰性求值特点,并遵循函数式编程语言的全部要求。
Miranda语言于1985年发表,配套发布了一个C语言编写的编译器,可以在Linux、Unix系统上运行,之后再1987年和1989年发布了更新。
这门语言部分采用了来自ML语言的设计,并为后续发展出的Haskell语言提供了很多新的理念。
### 2.1.3 Haskell
Haskell是于1990年在Miranda语言的基础上进行标准化的,它的理论基础也是λ演算。Haskell的命名来源于美国逻辑学家哈斯凯尔·加里,他在数理逻辑方面的工作很有造诣。
![](https://www.writebug.com/myres/static/uploads/2021/10/31/04c7d379b3cba27281a8558094b293e9.writebug)
值得一提的是Haskell的标志,如下图所示:
图2.1 Haskell语言标志
图中的标志构成一个字母λ的样子,就是为了致敬λ演算这一套基于数学的形式系统。
Haskell和前面提到的Miranda�
没有合适的资源?快使用搜索试试~ 我知道了~
基于C语言实现的SML简单程序设计【100013046】
共84个文件
sml:37个
ppt:13个
jpg:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 40 浏览量
2023-07-24
15:07:25
上传
评论
收藏 107.79MB ZIP 举报
温馨提示
课程中总共安排了三次实验,实验目标和具体验证的知识点如下: 1 第一次实验:(1)熟悉SML/NJ开发环境及使用;(2)掌握SML基本语法和书写规则;(3)SML简单程序设计和程序编写 2 第二次实验:(1)掌握list结构的ML编程方法和程序性能分析方法;(2)掌握基于树结构的ML编程方法和程序性能分析方法。 3 第三次实验:(1)掌握多态类型、option类型和高阶函数的编程方法;(2)用ML语言求解实际问题。
资源推荐
资源详情
资源评论
收起资源包目录
100013046-基于C语言实现的SML简单程序设计.zip (84个子文件)
smlmaster
LICENSE 1KB
docs
CS1701_U201714501_熊逸钦.docx 595KB
CS1701_U201714501_熊逸钦.pdf 724KB
homework
chap3
compare.sml 108B
datatype.sml 123B
3.sml 231B
3.2
Msort.sml 131B
3.2.sml 1KB
trav.sml 84B
SplitAt.sml 492B
Merge.sml 207B
Ins.sml 270B
size.sml 109B
test.sml 135B
hw1
hw 1-zr.ppt 149KB
hw1-4.sml 230B
hw1.txt 790B
try.sml 109B
hw2
hw2.pdf 436KB
hw3
hw3-2-2.sml 362B
hw 3-zr.ppt 133KB
hw3-1.txt 145B
hw3-2-3.sml 438B
hw3-2-1.sml 332B
CS1701-熊逸钦-U201714501-hw3.docx 86KB
CS1701-熊逸钦-U201714501-hw3.pdf 182KB
lab
lab1
5.sml 351B
CS1701-熊逸钦-U201714501-lab1.docx 97KB
CS1701-熊逸钦-U201714501-lab1.pdf 182KB
lab1-1.png 47KB
2.sml 169B
1.sml 645B
4.sml 192B
lab1-2.png 18KB
3.sml 365B
7.sml 173B
6.sml 220B
lab3
5.sml 536B
CS1701-熊逸钦-U201714501-lab3.pdf 211KB
2.sml 242B
CS1701-熊逸钦-U201714501-lab3.docx 168KB
Lab 3-zr.ppt 143KB
1.sml 165B
4.sml 323B
3.sml 371B
7.sml 726B
6.sml 1KB
lab2
5.sml 732B
Lab 2-zr.ppt 144KB
CS1701-熊逸钦-U201714501-lab2.docx 117KB
CS1701-熊逸钦-U201714501-lab2.pdf 209KB
lab2.sml 168B
2.sml 287B
1-2.sml 338B
4.sml 203B
1-1.sml 170B
3.sml 711B
README.assets
wps30AC.tmp.jpg 17KB
wps30AB.tmp.jpg 15KB
wps30A8.tmp.jpg 12KB
wps30A4.tmp.jpg 16KB
wps30A7.tmp.jpg 11KB
wps30A9.tmp.jpg 19KB
wps30A5.tmp.png 179KB
wps30BD.tmp.jpg 26KB
wps30A6.tmp.jpg 23KB
wps30AA.tmp.jpg 31KB
ppt
函数式编程_08.pptx 304KB
函数式编程_02_02.ppt 184KB
函数式编程_02_01.ppt 216KB
函数式编程_04.ppt 411KB
函数式编程_03_mo.ppt 485KB
编译环境.zip 37.16MB
参考教材.zip 80.22MB
函数式编程_07.ppt 317KB
函数式编程_01_02.pdf 4.35MB
函数式编程_05.ppt 283KB
函数式编程_01_01.pdf 10.39MB
函数式编程_09.ppt 386KB
函数式编程_10.ppt 331KB
课程相关更新.txt 167B
函数式编程报告模板.docx 2.1MB
函数式编程_06.ppt 259KB
README.md 28KB
共 84 条
- 1
资源评论
神仙别闹
- 粉丝: 2667
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功