Curry (Programmiersprache)
| Curry | |
|---|---|
| [[Datei:Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)|150px]] | |
| Basisdaten | |
| Paradigmen: | funktional, logisch, nicht-strikt, modular |
| Erscheinungsjahr: | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) |
| Designer: | Michael Hanus, Sergio Antoy et al. |
| Entwickler: | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) |
| Aktuelle Version | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value)) |
| Typisierung: | statisch, stark, inferriert |
| Wichtige Implementierungen: | PAKCS (mit Prolog-Code als Ergebnis) KiCS2 (mit Haskell-Code als Ergebnis) |
| Beeinflusst von: | Haskell |
| Betriebssystem: | portabel |
| Lizenz: | Lua-Fehler in Modul:Wikidata, Zeile 1703: attempt to index field 'wikibase' (a nil value) |
| curry-lang.org | |
Curry<ref>Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Curry: A Truly Integrated Functional Logic Language.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> ist eine experimentelle funktionallogische Programmiersprache,<ref>Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung2</ref> die auf Haskell basiert. Sie vereint Elemente der funktionalen und logischen Programmierung, insbesondere Constraintprogrammierung.
Sie erweitert Haskell mit Ausnahme des Überladens mittels Typklassen; sie sind lediglich von einigen Implementierungen als Spracherweiterung enthalten, beispielsweise vom Münster Curry Compiler.<ref>The Münster Curry Compiler: Source CodeA mirror of an experimental branch adding type classes to the Münster Curry compiler is available at [1]. There is also a status page summarizing implemented changes and open issues.</ref>
Grundlagen[Bearbeiten]
Es gibt keine Seiteneffekte im Gegensatz zu prozeduralen, objektorientierten oder den meisten anderen imperativen Sprachen. Daher spielt die Reihenfolge, in der Teilausdrücke ausgewertet werden, keine Rolle für den Wert des Ergebnisses. Ferner gibt es konzeptionell keine Funktionen mehr, an ihre Stelle treten Relationen mit Funktionscharakter, sog. Korrespondenzen. Im Gegensatz zu Funktionen sind diese nicht notwendig rechtseindeutig, das heißt für eine bestimmte Eingabe müssen sie nicht genau ein Ergebnis haben, insbesondere sind sie von vornherein partiell und mehrwertig. Dadurch ist es möglich, nicht nur Konstruktoren, sondern auch Funktionsaufrufe beim Pattern Matching einzusetzen, die die darin vorkommenden Variablen nicht notwendigerweise eindeutig belegen. Das wird durch nicht-deterministische Bedarfsauswertung sinnvoll ergänzt.
Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden.
Strategien[Bearbeiten]
Da es keine Seiteneffekte gibt, kann in einem funktionallogischen Programm mit beliebigen Strategien ausgewertet werden. Um Ausdrücke auszuwerten, verwenden die meisten Curry-Compiler eine Variante des {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) das Bedarfsauswertung mit nicht-deterministischen Suchtechniken verbindet. Im Gegensatz zu Prolog, das Rücksetzverfahren auf der Suche nach Lösungen verwendet, beschränkt sich Curry nicht auf eine bestimmte Strategie. Vielmehr gibt es Implementierungen von Curry, wie KiCS2, bei denen der Benutzer auf einfache Weise eine Strategie auswählen kann; unter anderem Tiefensuche, Breitensuche, iteratives Vertiefen oder paralleles Suchen.
Weblinks[Bearbeiten]
- Curry – Die Homepage von Curry (englisch)
- Smap – Eine webbasierte Ausführungsumgebung für Curry und Haskell mit vielen Beispielprogrammen (englisch)
- Die Seite Vorlage:Webarchiv/styles.css hat keinen Inhalt.MCC ( vom 16. Januar 2007 im Internet Archive) – Der Münster Curry Compiler, der C-Code generiert
- PAKCS – Eine größere Curry-Implementierung mit WWW-Interface, das Prolog-Code generiert (englisch)
- KiCS, KiCS2 – Eine Curry-Implementierung, die Haskell-Code generiert (englisch)
- Curry Mailing List (englisch)
- Homepage von Michael Hanus (englisch)
- Purely Functional Lazy Non-deterministic Programming (Fischer, Shan), Transforming Functional Logic Programs into Monadic Functional Programs (Braßel, Fischer, Hanus, Reck, 2010) on modeling lazy non-deterministic (logic) programming (like in Curry) in a purely functional language (Haskell); such approach might give the programmer more flexibility in the control over the strategies that—in the case of Curry—are built-in.
Belege[Bearbeiten]
<references />