
Hi Gregory, On Nov 2, 2010, at 9:27 AM, Gregory Crosswhite wrote:
I was thinking about using Curry, but it looks to me like the language is dead and hasn't seen much activity for a few years.
The community is smaller than the Haskell community but the PAKCS system is still actively developed. MCC is a compiler that generates C (rather than Prolog) code (which is often more efficient) but does not come with the same libraries as PAKCS.
Actually, the more that I think about my problem the more that I'm thinking I should just stick with the List monad.
If this is feasible then staying in Haskell might be a good choice.
Which does raise the question: when is it better to use a logic programming language instead of the list monad?
It is more cumbersome to model logic variables and unification in a pure functional language than having them provided natively. If you need unification or constraint solving then a language with built-in logic variables has an advantage. An advantage of combining laziness with non-determinism as in Curry is that you can interleave the non-deterministic generation of nested data with categorizing it which is more efficient, if the evaluation function is lazy. This combination is more cumbersome in a pure functional language than in a lazy functional-logic language like Curry (see [1] for how to do it). If you always need to generate elements completely before you categorize them, you probably do not gain from lazy non-determinism. Cheers, Sebastian [1]: http://www-ps.informatik.uni-kiel.de/~sebf/data/pub/icfp09.pdf http://sebfisch.github.com/explicit-sharing/