Content deleted Content added
m Link Haskell |
Jerryobject (talk | contribs) m WP:LINK update-standardize. |
||
(65 intermediate revisions by 45 users not shown) | |||
Line 1:
{{
{{Other uses|ML (disambiguation){{!}}ML}}
{{More citations needed|date=
{{Infobox programming language
| name
| logo
| paradigm
| year = {{start date and age|1973}}▼
▲| designer = [[Robin Milner]] and others at the [[University of Edinburgh]]
▲| developer =
| latest release version =
| latest release date
| typing
| implementations
| dialects
| influenced by
| influenced
| operating system
| license
| website
}}
'''ML''' (
▲'''ML''' ("Meta Language") is a general-purpose [[functional programming language]]. It has roots in [[Lisp (programming language)|Lisp]], and has been characterized as "Lisp with types".{{citation needed|date=January 2019}} ML is a statically-scoped functional programming language like Scheme. It is known for its use of the polymorphic [[Hindley–Milner type system]], which automatically assigns the [[data type|types]] of most [[Expression (programming)|expressions]] without requiring explicit type annotations, and ensures type safety{{snd}}there is a formal proof that a well-typed ML program does not cause runtime type errors.<ref>Robin Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 17(3):348–375, 1978.</ref> ML provides pattern matching for function arguments, [[Garbage collection (computer science)|garbage collection]], [[imperative programming]], [[call-by-value]] and [[currying]]. It is used heavily in programming language research and is one of the few languages to be completely specified and verified using [[Formal semantics of programming languages|formal semantics]]. Its types and pattern matching make it well-suited and commonly used to operate on other formal languages, such as in [[compiler writing]], [[automated theorem proving]], and [[formal verification]].
==Overview==
Features of ML include a call-by-value [[evaluation strategy]], [[first-class function]]s, automatic memory management through
ML can be referred to as an ''impure'' functional language, because although it encourages functional programming, it does allow [[side-effect (computer science)|side-effects]]<ref>{{cite book |last1=Sebesta |first1=Robert |title=Concepts of Programming Languages |date=1999 |publisher=Addison-Westley |isbn=0-201-38596-1 |page=54 |edition=4th}}</ref> (like languages such as [[Lisp (programming language)|Lisp]], but unlike a [[purely functional language]] such as [[
ML's strengths are mostly applied in language design and manipulation (compilers, analyzers, theorem provers), but it is a general-purpose language also used in [[bioinformatics
ML was developed by [[Robin Milner]] and others in the early 1970s at the [[University of Edinburgh]],<ref name="Gordon1996">{{cite web |
Today there are several languages in the ML family; the three most prominent are [[Standard ML]] (SML), [[OCaml]] and [[F Sharp (programming language)|F#]]. Ideas from ML have influenced numerous other languages, like [[
==Examples==
The following examples use the syntax of Standard ML. Other ML dialects such as
===Factorial===
Line 53:
</syntaxhighlight>
The function also relies on pattern matching, an important part of ML programming. Note that parameters of a function are not necessarily in parentheses but separated by spaces. When the function's argument is 0 (zero) it will return the integer 1 (one). For all other cases the second line is tried. This is the [[Recursion (computer science)|recursion]], and executes the function again until the base case is reached.
This implementation of the factorial function is not guaranteed to terminate, since a negative argument causes an [[infinite descending chain]] of recursive calls. A more robust implementation would check for a nonnegative argument before recursing, as follows:
Line 62:
| fac n = n * fac (n - 1)
in
if (n < 0) then raise
end
</syntaxhighlight>
The problematic case (when n is negative) demonstrates a use of ML's
The function can be improved further by writing its inner loop
<syntaxhighlight lang="sml">
Line 76 ⟶ 75:
| fac n acc = fac (n - 1) (n * acc)
in
if (n < 0) then raise
end
</syntaxhighlight>
===List reverse===
The following function
<syntaxhighlight lang="sml">
fun reverse [] = []
| reverse (x :: xs) = (reverse xs) @ [x]
</syntaxhighlight>
This implementation of reverse, while correct and clear, is inefficient, requiring [[quadratic time]] for execution. The function can be rewritten to execute in [[linear time]]
<syntaxhighlight lang="sml">
fun 'a reverse xs : 'a list =
</syntaxhighlight>
▲Notably, this function is an example of parametric polymorphism. That is, it can consume lists whose elements have any type, and return lists of the same type.
===Modules===
Modules are ML's system for structuring large projects and libraries. A module consists of a signature file and one or more structure files. The signature file specifies the [[API]] to be implemented (like a C header file, or [[Interface (Java)|Java interface]] file).
<syntaxhighlight lang="sml">
signature ARITH =
sig
type t
val zero : t
val
▲ val sum : t * t -> t;
end
</syntaxhighlight>
Line 119 ⟶ 110:
structure Rational : ARITH =
struct
datatype t = Rat of int * int
val zero = Rat (0, 1)
fun succ (Rat (a, b)) = Rat
fun sum (Rat (a, b),
end
</syntaxhighlight>
Line 131 ⟶ 122:
==See also==
* [[Standard ML]] and
* [[Dependent ML]]: a dependently typed extension of ML
** [[
* [[PAL (programming language)]]: an educational language related to ML
* [[OCaml]]: an ML dialect used to implement [[Coq (software)|Coq]] and [[OCaml#Software written in OCaml|various software]]
▲* [[Lazy ML]], an experimental lazily evaluated ML dialect from the early 1980s
▲* [[PAL (programming language)]], an educational language related to ML
==References==
Line 146 ⟶ 134:
==Further reading==
{{refbegin}}
* ''The Definition of Standard ML'', Robin Milner, [[Mads Tofte]], [[Robert Harper (computer scientist)|Robert Harper]], MIT Press 1990; (revised edition adds author David MacQueen), MIT Press 1997, {{ISBN|0-262-63181-4}} [https://smlfamily.github.io/sml97-defn.pdf The Definition of Standard ML (Revised)].
* ''Commentary on Standard ML'', [[Robin Milner]], [[Mads Tofte]], MIT Press 1997, {{ISBN|0-262-63137-7}}.
* ''ML for the Working Programmer'', [[Lawrence Paulson]], Cambridge University Press 1991, 1996, {{ISBN|0-521-57050-6}}.
* {{cite book |url=https://www.cs.cmu.edu/~rwh/isml/book.pdf
* ''Elements of ML Programming'', [[Jeffrey D. Ullman]], Prentice-Hall 1994, 1998, {{ISBN|0-13-790387-1}}.
{{refend}}
==External links==
* [http://smlnj.org Standard ML of New Jersey, another popular implementation]
* [http://msdn.microsoft.com/en-us/fsharp/default.aspx F#, an ML implementation using the Microsoft .NET framework] {{Webarchive|url=https://web.archive.org/web/20100218004857/http://msdn.microsoft.com/en-us/fsharp/default.aspx |date=2010-02-18}}
* [http://mlton.org MLton, a whole-program optimizing Standard ML compiler]
* [https://cakeml.org CakeML, a read-eval-print loop version of ML with formally verified runtime and translation to assembler]
{{ML programming}}
{{Programming languages}}
{{Authority control}}
{{DEFAULTSORT:ML (Programming Language)}}
[[Category:Academic programming languages]]
[[Category:Functional languages]]
▲[[Category:Procedural programming languages]]
[[Category:ML programming language family]]
[[Category:Pattern matching programming languages]]
[[Category:
[[Category:Programming languages created in 1973]]
[[Category:Statically typed programming languages]]
|