Curry (programming language): Difference between revisions

Content deleted Content added
Owl2442 (talk | contribs)
m Strategies: Update URL of KiCS2
Owl2442 (talk | contribs)
Add section on implementations and programming tools
Line 126:
Due to the absence of side effects, a functional logic program can be executed with different strategies. To evaluate expressions, Curry uses a variant of the ''needed narrowing'' strategy which combines [[lazy evaluation]] with non-deterministic search strategies. In contrast to Prolog, which uses backtracking to search for solutions, Curry does not fix a particular search strategy. Hence, there are implementations of Curry, like [https://www.curry-lang.org/kics2/ KiCS2], where the user can easily select a search strategy, like [[depth-first search]] (backtracking), [[breadth-first search]], iterative deepening, or parallel search.
 
==Implementations and programming tools==
There are various implementations of Curry available. The most prominent representatives are the Portland Aachen Kiel Curry System [https://www.curry-lang.org/pakcs/ PAKCS] which compiles Curry programs into [[Prolog]], the Kiel Curry System [https://www.curry-lang.org/kics2/ KiCS2] which compiles Curry programs into [[Haskell]], the Münster Curry Compiler [http://danae.uni-muenster.de/curry/ MCC], and [https://www.curry-lang.org/curry2go/ Curry2Go] which compiles Curry programs into [[Go (programming language)|Go]] programs and supports fair parallel search by mapping non-deterministic evaluations into [[light-weight process]]es (goroutines).
 
To support programming in Curry, there is a collection of [https://cpm.curry-lang.org/ Curry software packages], a [https://cpm.curry-lang.org/currygle/ Curry API search engine], a [https://github.com/fwcd/curry-language-server Curry language server] providing [[integrated development environment|IDE]] support, e.g., in [[Visual Studio Code]], as well as various program documentation and analysis tools.
==Discussion and further reading==
[[John Alan Robinson]] discussed in his invited CL2000 paper<ref>{{cite book |last=Robinson |first=John Alan |title=First International Conference on Computational Logic (CL 2000) |chapter=Computational Logic: Memories of the Past and Challenges for the Future |series=Lecture Notes in Computer Science |year=2000 |doi=10.1007/3-540-44957-4_1 |volume=1861 |pages=1-24 |isbn=978-3-540-67797-0}}</ref> the integration of functional programming with logic programming where he wrote: "It is inexplicable that the two idioms have been kept apart for so long within the computational logic repertory. We need a single programming language in which both kinds of programming are possible and can be used in combination with each other." He surveyed different attempts and concluded that Curry is the "most promising one".