计算机科学

首页 > 计算机科学

ML语言

2018-09-05 18:19:36     所属分类:程序设计语言
ML
编程范型 多范型:指令式,函数式
设计者 Robin Milner & 爱丁堡大学其他人
发行时间 1973年
型态系统 静态类型,强类型,类型推论
衍生副语言
Standard ML, OCaml, F#
启发语言
ISWIM
影响语言
Miranda, Haskell, Cyclone, Nemerle, C++, F♯, Clojure, Opa, Erlang

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

ML一般被归为非纯函数式编程语言,因为它允许副作用和指令式编程。这一点和纯函数式编程语言——例如Haskell——很不一样。

ML特性包括:传值呼叫(Call by value)的求值策略,一级函数,带有垃圾收集的自动内存管理,参数多态,静态数据类型,类型推论,代数数据类型,模式匹配和异常处理。

不像Haskell,ML使用及早求值,也就是说所有的子表达式总是被求值。导致的一个结果是你不能使用无穷表。然而,惰性求值产生的无穷表可以通过使用匿名函数来模拟。

今天在ML家族中有好几种语言:两种主要的方言是Standard ML和Caml,其他的包括F#-针对Microsoft .NET平台的开放研究项目。ML中的思想影响了众多的语言,例如Haskell,Cyclone和Nemerle。

ML的实力大多被用于语言设计和操作(编译器、分析器、定理证明机),但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,一个P2P的客户/服务器程序等等。

目录

  • 1 ML例子
    • 1.1 剖析一个ML函数
  • 2 参见
  • 3 外部链接

ML例子

剖析一个ML函数

函数式编程语言的"Hello World" 程序是阶乘函数。用纯ML表达就是:

fun fac : (fn: int -> int) 0 = 1
   | fac n = n * fac (n-1);

阶乘在这里被描述成一个递归函数,它有一个终止条件。可以看出它和数学课本中对于阶乘的描述很相似。很多ML代码的语法类似数学。

递归函数第一行的一部分是可选的,描述了函数的类型。可以这么读:函数fac (fun fac) 是一个 (:) 由整数至整数的函数 (fn: int -> int)。也就是说,函数以一个整数作为参数,返回另一个整数。去掉非必要的类型声明后,这个函数如下:

fun fac 0 = 1
   | fac n = n * fac(n-1);

这个函数也依赖模式匹配,ML编程的重要部分。 注意一个函数的参数不是在圆括号中而是由空格分开。当函数的参数值为0时返回整数1。其他情况下将会尝试第二行。这一个递归,将会再一次调用函数直到满足基准条件。

参见

  • OCaml, ML的一种方言,支持面向对象编程
  • Standard ML of New Jersey,Standard ML的一种实现

外部链接

  • Moscow ML,一个流行的Standard ML实现
  • Standard ML of New Jersey,另一个流行的实现
  • F#,一个使用Microsoft .NET framework的ML实现
  • MLton,全程序优化的Standard ML编译器

版权声明:本文由北城百科网创作,转载请联系管理获取授权,未经容许转载必究。https://www.beichengjiu.com/computerscience/340589.html

上一篇:Oberon
下一篇:PL/I
相关推荐