Curry ist eine experimentelle, funktional-logische Programmiersprache, die auf Haskell basiert. Sie verbindet funktionale Programmierung mit Konzepten der logischen Programmierung wie nichtdeterministischen Funktionen, freien Variablen und Constraint-Programming. Entwickelt wird Curry seit Mitte der 1990er-Jahre an der Universität Kiel (Michael Hanus), Aachen und Portland.
Wichtigste Implementierungen
PAKCS– Portland Aachen Kiel Curry System, übersetzt Curry nach PrologKiCS2– Kiel Curry System 2, übersetzt Curry nach HaskellMCC– Münster Curry CompilerCurry2Go– neuere Implementierung mit Go-Backend
Curry-Quellcode steht in Dateien mit der Endung .curry. Module werden wie in Haskell mit module Main where deklariert.
PAKCS nutzen
pakcs # interaktive Curry-Shell (REPL) starten
:load Main.curry # Modul laden
main # Ausdruck/Goal auswerten
:quit # PAKCS beenden
KiCS2 nutzen
kics2 Main.curry # kompiliert Curry-Code nach Haskell (Modul Main)
./Main # ausführbare Datei starten
Beispiel
Nichtdeterminismus: Die Funktion coin liefert wahlweise 0 oder 1.
coin = 0 ? 1 -- ? ist der Nichtdeterminismus-Operator
main = coin
Curry wird in der Lehre und Forschung eingesetzt, um deklarative Programme mit Suche, Constraints und verteilten Anwendungen zu kombinieren. Verwandt sind die rein funktionalen Sprachen Haskell-Befehle und Clean-Befehle.