Curry
Basisdaten
Paradigmen: funktional, logisch, nicht-strikt, modular
Erscheinungsjahr: 1995
Designer: Michael Hanus, Sergio Antoy et al.
Entwickler: Christian-Albrechts-Universität zu Kiel
Aktuelle Version 3.8.0[1] (7. April 2025)
Typisierung: statisch, stark, inferriert
Wichtige Implementierungen: PAKCS (mit Prolog-Code als Ergebnis) KiCS2 (mit Haskell-Code als Ergebnis)
Beeinflusst von: Haskell
Betriebssystem: portabel
Lizenz: 3-Klausel-BSD
curry-lang.org

Curry[2] ist eine experimentelle funktionallogische Programmiersprache,[3] 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.[4]

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.

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 needed narrowing, 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.

Bearbeiten

Belege

Bearbeiten
  1. PAKCS Version 3.8.0 (07/04/25).
  2. Michael Hanus (ed.): Curry: A Truly Integrated Functional Logic Language. (englisch).
  3. Sergio Antoy and Michael Hanus: Functional Logic Programming. In: Communications of the ACM. 53. Jahrgang, Nr. 4. ACM, 2010, S. 74–85, doi:10.1145/1721654.1721675 (englisch, acm.org).
  4. 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.

📚 Artikel Terkait di Wikipedia

Funktionallogische Programmierung

gegebenen Liste zurückgibt. Functional logic programming an der Universität Kiel Gopalan Nadathur, D. Miller: Logic Programming. Hrsg.: D. M. Gabbay, C.

GNU Guile

Core for Complete Applications“, Handbook of Programming Languages, Volume IV: Functional and Logic Programming Languages, Peter H. Salus (Herausgeber). 1998

Henk Barendregt

Logic and the Foundations of Mathematics, 103, North-Holland 1984 Barendregt Introduction to General Type Systems, Journal of Functional Programming,

Von-Neumann-Architektur

S. 27–75 (PDF, 9,556 MB) John Backus: Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. In: Communications

Typinferenz

Logic. In: Transactions of the American Mathematical Society, Vol. 146, 1969, S. 29–60 jstor.org Milner: A Theory of Type Polymorphism in Programming

Thomas Streicher

interpretation of type theory (1996). Domain-theoretic Foundations of Functional Programming (2006). Die Arbeiten von Thomas Streicher haben die theoretischen

R (Programmiersprache)

ISBN 978-3-540-79997-9.  John M. Chambers: Object-Oriented Programming, Functional Programming and R. In: Statistical Science. Band 29, Nr. 2, 2014, S. 167–180

Sudoku

Bird: Functional pearl: A program to solve Sudoku (Memento vom 2. Dezember 2012 im Internet Archive) (PDF; 95 kB) In: Journal of Functional Programming, Vol