Zum Inhalt springen

Clean (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 22. April 2023 um 13:41 Uhr durch imported>Lómelinde (text→clean).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Clean
[[Datei:Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)|150px]]
Basisdaten
Paradigmen: funktional, nicht-strikt, modular, deklarativ
Erscheinungsjahr: 1987
Designer: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Entwickler: Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Aktuelle Version: 3.1  (20. Dezember 2021)
Beeinflusst von: Haskell
Betriebssystem: Windows, Linux, Mac OS X, Solaris etc.
Lizenz: LGPL, kommerziell
https://clean.cs.ru.nl/Clean

Clean ist eine funktionale Programmiersprache.

Clean zeichnet sich durch referenzielle Transparenz aus, was bedeutet, dass das Ergebnis eines Funktionsaufrufes nur von den Eingabeparametern abhängt. Bei gleichen Eingabeparametern erhält man also auch immer das gleiche Ergebnis.

Clean hat ähnliche Eigenschaften wie die Programmiersprache Haskell. Auffälligster Unterschied ist die Verwendung von uniqueness typing für die Ein- und Ausgabe anstelle einer Monade.

Beispiele

<syntaxhighlight lang="clean">

module hallo
Start = "Hallo Welt!"

</syntaxhighlight>

Fakultät (Mathematik): <syntaxhighlight lang="clean">

module fakultaet
fak 0 = 1
fak n = n * fak (n-1)
// Berechne den Wert von 10 Fakultät
Start = fak 10

</syntaxhighlight>

Fibonacci-Folge: <syntaxhighlight lang="clean">

module fibonacci
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
// Berechne den Wert der siebten Fibonacci-Zahl
Start = fib 7

</syntaxhighlight>

Infixnotation: <syntaxhighlight lang="clean">

(^) infixr 8 :: Int Int -> Int
(^) x 0 = 1
(^) x n = x * x ^ (n-1)

</syntaxhighlight>

Die gegebene Typdeklaration definiert die Funktion (^) als rechtsassoziativen Infixoperator mit Priorität 8. Dies bedeutet, dass x*x^(n-1) äquivalent ist zu x*(x^(n-1)) ist, und nicht zu (x*x)^(n-1). Der (^)-Operator ist in der Clean-Standard-Umgebung vordefiniert.

Quicksort <syntaxhighlight lang="clean">

 module sort
 qsort :: [a] -> [a] | Ord a
 qsort []     = []
 qsort [a:xs] = qsort [x \\ x <- xs | x < a] ++ [a] ++ qsort [x \\ x <-xs | x >= a]
 // sortiere Liste
 Start = qsort [5,4,3,2,1]

</syntaxhighlight>

Weblinks