<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Standard_ML</id>
	<title>Standard ML - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Standard_ML"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Standard_ML&amp;action=history"/>
	<updated>2026-05-25T09:21:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Standard_ML&amp;diff=186152&amp;oldid=prev</id>
		<title>imported&gt;Knowledge2need: Datumsangaben entlinkt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Standard_ML&amp;diff=186152&amp;oldid=prev"/>
		<updated>2024-07-19T15:10:33Z</updated>

		<summary type="html">&lt;p&gt;Datumsangaben entlinkt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{{Infobox Programmiersprache&lt;br /&gt;
 | Name                          = &lt;br /&gt;
 | Logo                          = &lt;br /&gt;
 | Beschreibung                  = &lt;br /&gt;
 | Paradigma                     = funktional&lt;br /&gt;
 | Erscheinungsjahr              = 1990&lt;br /&gt;
 | Designer                      = &lt;br /&gt;
 | Entwickler                    = [[Robin Milner]]&lt;br /&gt;
 | AktuelleVersion               = ’97&lt;br /&gt;
 | AktuelleVersionFreigabeDatum  = 1997&lt;br /&gt;
 | AktuelleVorabVersion          = &lt;br /&gt;
 | AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
 | Typisierung                   = stark, statisch, implizit&lt;br /&gt;
 | Implementierung               = HaMLet, Moscow ML, MLj, ML Kit, MLton, MLWorks, Poly/ML, Poplog Standard ML, [[SML/NJ]], [https://github.com/SOSML/SOSML SOSML]&lt;br /&gt;
 | Dialekte                      = &lt;br /&gt;
 | Standardisierungen            = &lt;br /&gt;
 | Beeinflusst_von               = [[ML (Programmiersprache)|ML]]&lt;br /&gt;
 | Beeinflusste                  = [[Ocaml]], [[Haskell (Programmiersprache)|Haskell]], [[Rust (Programmiersprache)|Rust]]&lt;br /&gt;
 | Betriebssystem                = &lt;br /&gt;
 | Lizenz                        = &lt;br /&gt;
 | Website                       = [http://www.standardml.org/ www.standardml.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Standard ML&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;SML&amp;#039;&amp;#039;&amp;#039;) ist eine von [[ML (Programmiersprache)|ML]] abstammende [[funktionale Programmiersprache]] mit einigen [[Imperative Programmierung|imperativen]] Merkmalen (zum Beispiel im Bereich File IO).&lt;br /&gt;
&lt;br /&gt;
ML-Schöpfer [[Robin Milner]] schlug SML 1983 vor, um die verschiedenen Dialekte von ML zu standardisieren. Die Sprache wurde von 1984 bis 1988 entwickelt und schließlich 1990 von Robin Milner, Mads Tofte und Robert Harper formalisiert. 1997 wurde mit SML&amp;#039;97 eine Revision der Sprache veröffentlicht, die neben einigen Vereinfachungen auch eine SML-Basisbibliothek enthält.&lt;br /&gt;
&lt;br /&gt;
Wichtige Merkmale von SML sind unter anderem die statische [[Typisierung (Informatik)|Typisierung]], [[Polymorphie (Programmierung)|Polymorphie]] auf Funktions- und Datentypsebene, [[automatische Speicherbereinigung]] sowie strenge Auswertung und [[Ausnahmebehandlung]]. Außerdem unterstützt SML [[Funktionen höherer Ordnung]], Module und sogenannte [[Funktor]]en, die hier parametrisierte Datentypen bezeichnen.&lt;br /&gt;
&lt;br /&gt;
Eine Besonderheit von SML ist, dass die Sprache vollständig formal definiert ist. Dadurch können wichtige Eigenschaften der Sprache [[Mathematik|mathematisch]] [[Beweis (Mathematik)|bewiesen]] werden.&lt;br /&gt;
&lt;br /&gt;
== Programmbeispiele ==&lt;br /&gt;
=== Rekursive Berechnung der Fakultät ===&lt;br /&gt;
Die [[Fakultät (Mathematik)|Fakultät]] einer [[Natürliche Zahl|natürlichen Zahl]] kann man in &amp;#039;&amp;#039;SML&amp;#039;&amp;#039; mittels folgenden Programms berechnen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun fak (n) = if n &amp;lt; 1 then 1 else n * fak (n-1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rekursive Berechnung der Fibonaccizahlen ===&lt;br /&gt;
Die n-te [[Fibonacci-Folge|Fibonacci-Zahl]] kann man in &amp;#039;&amp;#039;SML&amp;#039;&amp;#039; mittels folgenden Programms berechnen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun fib (0) = 0&lt;br /&gt;
  | fib (n) = if n &amp;lt;= 2 then 1 else fib(n-1) + fib(n-2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Stelligkeit einer Zahl ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun stell (x:int) = if x&amp;lt;1 then 0 else stell(x div 10) + 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Quersumme einer Zahl ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun quer (x:int) = if x&amp;lt;1 then 0 else quer(x div 10) + x mod 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Die Faltungsprozedur foldl für Listen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun foldl f s nil = s&lt;br /&gt;
  | foldl f s (x::xr) = foldl f (f(x,s)) xr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Umwandeln eines Strings, der eine Zahl darstellt, zu Int ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun toInt x = foldl(fn(i,k)=&amp;gt;ord(i)-ord #&amp;quot;0&amp;quot; + k*10) 0 (explode x)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insertsort ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun insert (x, nil) = [x]&lt;br /&gt;
  | insert (x, y::yr) = if x&amp;lt;=y then x::y::yr else y::insert(x,yr)&lt;br /&gt;
fun isort xs = foldl insert nil xs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mergesort ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun split xs = foldl (fn(i, (ys,zs)) =&amp;gt;(zs, i::ys)) (nil,nil) xs&lt;br /&gt;
fun merge (xs,nil) = xs&lt;br /&gt;
  | merge (nil,ys) = ys&lt;br /&gt;
  | merge (x::xr,y::yr) = if x&amp;lt;=y then x::merge(xr,y::yr) else y::merge(x::xr,yr)&lt;br /&gt;
fun mergesort nil = nil&lt;br /&gt;
  | mergesort [x] = [x]&lt;br /&gt;
  | mergesort xs = let val (ys,zs) = split(xs) in merge(mergesort ys, mergesort zs) end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;in situ&amp;quot;-Reversierung eines Arrays ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sml&amp;quot;&amp;gt;&lt;br /&gt;
fun reverse (a) = let&lt;br /&gt;
  fun swap l r = &lt;br /&gt;
    let&lt;br /&gt;
      val vl = Array.sub(a,l)&lt;br /&gt;
      val vr = Array.sub(a,r)&lt;br /&gt;
    in&lt;br /&gt;
      if l &amp;gt;= r then () else&lt;br /&gt;
        (Array.update(a,l,vr); Array.update(a,r,vl);swap (l+1) (r-1))&lt;br /&gt;
    end&lt;br /&gt;
  in&lt;br /&gt;
    swap (0) (Array.length (a) -1)&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
Es existieren verschiedene [[Compiler]] für SML, die entweder [[Bytecode]] oder [[Maschinencode]] generieren. Die Referenz[[implementierung]] ist SML/NJ. Sml2c ist ein besonderer Compiler, der SML in [[C (Programmiersprache)|C]] Code übersetzt.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mpi-sws.org/~rossberg/hamlet/ HaMLet]&lt;br /&gt;
* [http://www.mlton.org/ MLton] (stark optimierender Compiler)&lt;br /&gt;
* [https://mosml.org/ Moscow ML](alte Webseite verfügbar unter http://www.itu.dk/~sestoft/mosml.html)&lt;br /&gt;
* [http://www.smlnj.org/ Standard ML of New Jersey]&lt;br /&gt;
* [https://www.ps.uni-saarland.de/alice/ Alice ML]&lt;br /&gt;
* [http://www.polyml.org/ Poly/ML]&lt;br /&gt;
* [http://www.funet.fi/pub/languages/ml/sml2c/ sml2c] (C Code)&lt;br /&gt;
* [http://www.cl.cam.ac.uk/Research/TSG/SMLNET/ SML.NET] (Bytecode)&lt;br /&gt;
* [http://www.cs.bham.ac.uk/research/projects/poplog/freepoplog.html Poplog] (IDE für Forschung und Lehre im Bereich [[Künstliche Intelligenz]])&lt;br /&gt;
* [https://cakeml.org/ CakeML]&lt;br /&gt;
* [https://github.com/SOSML/SOSML SOSML]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=[[Robin Milner]], Mads Tofte, Robert Harper, D. MacQueen&lt;br /&gt;
   |Titel=The Definition of Standard ML (Revised)&lt;br /&gt;
   |Verlag=MIT Press&lt;br /&gt;
   |Jahr=1997&lt;br /&gt;
   |ISBN=0-262-63181-4&lt;br /&gt;
   |Kommentar=offizielle Sprachdefinition}}&lt;br /&gt;
* [[Gert Smolka]]: &amp;#039;&amp;#039;Programmierung – eine Einführung in die Informatik mit Standard ML&amp;#039;&amp;#039;. Oldenbourg Wissenschaftsverlag, München 2008, ISBN 978-3-486-58601-5&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Scholarpedia|http://www.scholarpedia.org/article/Standard_ML_language|Standard ML Language|Mads Tofte}}&lt;br /&gt;
* Robert Harper: [http://www.cs.cmu.edu/~rwh/isml/book.pdf &amp;#039;&amp;#039;Programming in Standard ML&amp;#039;&amp;#039;.] (PDF, 756&amp;amp;nbsp;kB)&lt;br /&gt;
* [http://www.lfcs.inf.ed.ac.uk/reports/97/ECS-LFCS-97-364/ &amp;#039;&amp;#039;Programming in Standard ML ’97: A Tutorial Introduction&amp;#039;&amp;#039;.]&lt;br /&gt;
* [http://www.standardml.org/Basis/toc.html The Standard ML Basis Library]&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4295302-9}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Funktionale Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Knowledge2need</name></author>
	</entry>
</feed>