ML

来自开放百科 - 灰狐
跳转到: 导航, 搜索
Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 ML Thanks, Wikipedia.

ML 编程语言

目录

简介

ML 是一个通用的函数式编程语言,它是由爱丁堡大学的 Robin Milner 及他人在二十世纪七十年代晚期开发的。它的语法是从 ISWIM 得到的灵感。作为元语言的ML是为了帮助在 LCF 定理证明机中寻找证明策略而构想出来的。(之前的元语言是 pplambda,它联合了一阶逻辑演算和有类型的多态的λ演算)。它使用了 Hindley-Milner 类型推论算法来推测大多数值的类型,而不需要四处使用注解。

Introduction to Poly

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的客户/服务器程序等等。

标准

Standard-ML-97-seven-sections.png SML97

  • 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

实现

F*
Alpaca

ML 家族的两个主要的方言是 Standard ML 和 OCaml。ML 的实力大多被用于语言设计和操作,比如建构编译器、分析器、定理证明器。ML 确立了静态类型函数式编程范型,从而在编程语言历史上占有显要地位,它的思想在影响了众多的语言,例如:HaskellNemerle ATSElm

项目

文档

图书

图集

链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱