欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
ML
小 (→标准) |
小 (→标准) |
||
第49行: | 第49行: | ||
*Static Semantics for the Core(49 Inference Rules 推理规则) | *Static Semantics for the Core(49 Inference Rules 推理规则) | ||
− | *Static Semantics for Modules (50- | + | *Static Semantics for Modules (50-89,40 Inference Rules) |
− | *Dynamic Semantics for the Core(90- | + | *Dynamic Semantics for the Core(90-149,60 Inference Rules) |
− | *Dynamic Semantics for Modules(150- | + | *Dynamic Semantics for Modules(150-186,37 Inference Rules) |
*Programs(187-189,3 Inference Rules) | *Programs(187-189,3 Inference Rules) | ||
2022年10月16日 (日) 07:46的版本
您可以在Wikipedia上了解到此条目的英文信息 ML Thanks, Wikipedia. |
ML 编程语言
目录 |
简介
ML 是一个通用的函数式编程语言,它是由爱丁堡大学的 Robin Milner 及他人在二十世纪七十年代晚期开发的。它的语法是从 ISWIM 得到的灵感。作为元语言的ML是为了帮助在 LCF 定理证明机中寻找证明策略而构想出来的。(之前的元语言是 pplambda,它联合了一阶逻辑演算和有类型的多态的λ演算)。它使用了 Hindley-Milner 类型推论算法来推测大多数值的类型,而不需要四处使用注解。
- History of Standard ML The History of Standard ML 2020版
- The History of Standard ML: Ideas, Principles, Culture The History of Standard ML
ML & Lisp
Lisp was the language in which the Stanford LCF system was implemented and also served as its “meta-language.” The design of ML for Edinburgh LCF was informed by Milner’s experience at Stanford; in fact, LCF/ML was implemented by translation into Stanford Lisp code.《The History of Standard ML 2020版》86:7
Lisp 是实现斯坦福 LCF 系统的语言,同时也是其"元语言"。为爱丁堡 LCF 设计的 ML 是由 Milner 在斯坦福大学的经验提供的。事实上,LCF/ML 是通过翻译成斯坦福 Lisp 代码实现的。
功能
ML一般被归为非纯函数式编程语言,因为它允许副作用和指令式编程。这一点和纯函数式编程语言,例如Haskell很不一样。
ML特性包括:传值呼叫(Call by value)的求值策略,一级函数,带有垃圾收集的自动内存管理,参数多态,静态数据类型,类型推论,代数数据类型,模式匹配和异常处理。
不像Haskell,ML使用及早求值,也就是说所有的子表达式总是被求值。导致的一个结果是你不能使用无穷表。然而,惰性求值产生的无穷表可以通过使用匿名函数来模拟。
今天在ML家族中有好几种语言:两种主要的方言是Standard ML和Caml,其他的包括F#-针对Microsoft .NET平台的开放研究项目。ML中的思想影响了众多的语言,例如Haskell,Cyclone和Nemerle。
ML的实力大多被用于语言设计和操作(编译器构建、自动化定理证明和形式化验证),但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,一个P2P的客户/服务器程序等等。
标准
- Successor ML 是用来描述ML语言的下一个版本的术语
- SML97 Standard ML Grammar of SML97
- SML90
- ML2000
- Syntax of the Core
Reserved Words
abstype and andalso as case datatype do else end exception fn fun handle if in infix infixr let local nonfix of op open orelse raise rec then type val with withtype while ( ) [ ] { } , : ; ... _ | = => -> #
- Syntax of Modules
Reserved Words
eqtype functor include sharing sig signature struct structure where :>
- Static Semantics for the Core(49 Inference Rules 推理规则)
- Static Semantics for Modules (50-89,40 Inference Rules)
- Dynamic Semantics for the Core(90-149,60 Inference Rules)
- Dynamic Semantics for Modules(150-186,37 Inference Rules)
- Programs(187-189,3 Inference Rules)
指南
Programming in Standard ML '97: An On-line Tutorial
很多 SML 实现提供交互式REPL,比如 SML/NJ
Debian
$ sudo apt install smlnj $ sml Standard ML of New Jersey v110.79 [built: Tue Aug 8 16:57:33 2017] - 1 + 2 * 3; val it = 7 : int
实现
ML 家族的两个主要的方言是 Standard ML 和 OCaml。ML 的实力大多被用于语言设计和操作,比如建构编译器、分析器、定理证明器。ML 确立了静态类型函数式编程范型,从而在编程语言历史上占有显要地位,它的思想在影响了众多的语言,例如:Haskell、Nemerle ATS 和 Elm。
- Standard ML 是 ML 的现代方言,ML 是用于 LCF(可计算函数逻辑)定理证明计划的编程语言。Standard ML 在广泛使用的语言之中与众不同,源于它具有正式规定《The Definition of Standard ML》 给出了语言的类型规则和操作语义
- OCaml,ML的一种方言,支持面向对象编程。
- F#,.NET框架的ML实现。
- F* A Proof-oriented Programming Language
- isabelle
- Yeti is ML style functional programming language, that runs on the JVM.
- CakeML A Verified Implementation of ML, CakeML Types
- Alpaca Functional programming inspired by ML for the Erlang VM
- Futhark is a purely functional data-parallel programming language in the ML family, Written in Haskell.
- Standard ML of New Jersey
- MLKit The Standard ML Compiler and Toolkit
- MLton
- Poly/ML
- The Free Poplog Portal Poplog Standard ML