- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用ML编写正确的程序ML–ProgrammingCorrectly.docx
用ML编写正确的程序ML – Programming Correctly
汪旻
5110379036
yinger650@
函数式程序设计
过程式语言面向命令,函数式语言面向表达式
函数式语言避免繁琐的内存管理
函数式语言要求写出可靠正确的程序
函数式语言的几个概念
函数,递归,模式匹配,多态类型检测,高阶函数,无穷数据结构,惰性求值
ML与纯函数式编程语言的区别
ML是非纯函数式语言
热情求值
没有无穷数据结构
模块
……
多态类型检测
异常处理
简单的IO指令
……
ML的诞生
ML(Meta-Language) 是一个通用的函数式编程语言,它是由爱丁堡大学的Robin Milner在二十世纪七十年代晚期开发的,现在流行的方言有Standard ML和Caml.
启发语言:ISWIM
影响语言:Miranda, Haskell, Cyclone, C++, F#, Clojure, Felix, Opa, Erlang ……
设计初衷:LCF定理证明机中寻找证明策略
ML大多被用于语言设计和操作(编译器、分析器、定理证明机), 但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,一个P2P的客户/服务器程序等等。
Level 0
Hello world
“Hello world!”; (*make a string*)
print it; (*output it*)
阶乘函数
fun fac 0 = 1 | fac n = n * fac (n - 1);
LV.0
ML Programmer
LV.1
ML Programmer
Level Up!
Level 1
值的声明
命名常量
val pi = 3.14159;
声明函数
fun circle_area (r) = pi*r*r;
标识符
字母开头,允许数字、下划线、撇号’
!%$#+_*/:=?@\~`^|
Level 1
基本类型
数
int, real
+ - * div mod
~ 负号
类型约束
字符串
连接符^
#”0”和“0”
真值
orelse, andalso, not
if E then E1 else E2
Level 1
序偶、元组、记录
序偶
向量(2.5 , ~1.2) : real*real
type vec = real * real;
记录
val ZS = {name=“Zhang San”, age=20, major=“CS”};
#age ZS;
20 : int
LV.1
ML Programmer
LV.2
ML Programmer
Level Up!
Level 2
表达式
中缀操作符(infix operator)及其优先级、结合方式
传值调用(add….)
局部声明
let ... in ... end
local ... in ... end
支持嵌套
(* Example for infix operator *)
infix xor;
fun (p xor q) = (p orelse q) andalso not (p andalso q);
(* 中缀优先级 *)
infix 7 times;
(* 传值调用 *)
sqr(sqr(sqr(2)))
=sqr(sqr(2*2))
=sqr(sqr(4))
=sqr(4*4)
=sqr(16)
=16*16
=256
.
zero(sqr(sqr(sqr(2)))
=zero(sqr(sqr(2*2)))
=zero(sqr(sqr(4)))
=zero(sqr(4*4))
=zero(sqr(16))
=zero(16*16)
=zero(256)
=0
(* Example for let ... in ... end *)
fun fraction (n,d) =
let val com = gcd(n,d)
in (n div com, d div com)
end;
val fraction = fn : int * int - int * int
(* Example for local ... in ... end *)
local
fun itfib (n, prev, curr) : int =
if n=1 then curr
else itfib (n-1, curr, prev+curr)
in
fun fib (n) = itfib(n, 0, 1)
end;
val fib = fn ; int - int
LV.2
ML Programmer
LV.3
ML Programmer
Level
您可能关注的文档
最近下载
- YST 582-2013 电池级碳酸锂.pdf
- 淘股吧高手语录.docx VIP
- 2024~2025学年上学期七年级第一次月考数学试题(含答案).pdf VIP
- GB-T6284-1986化工产品中水分含量测定的通用方法重量法.pdf
- MSC:人工智能赋能可持续发展和投资白皮书.pdf VIP
- 24J306 窗井、设备吊装口、排水沟、集水坑图集.docx VIP
- 2014年深圳市坪山新区主要病媒生物监测及白纹伊蚊抗药性研究.pdf VIP
- T∕CBDA 69-2023 建筑装饰装修碳排放计算标准.pdf
- 国际私法(暨南大学)中国大学MOOC 慕课 章节测验 期末考试答案.docx VIP
- 金风2.5MW机组运行维护手册(1)(1).doc VIP
文档评论(0)