最有用和最具指导性的功能逻辑语言

时间:2013-07-16 11:18:45

标签: functional-programming logic-programming mercury curry

我对Prolog的力量感到非常惊讶。花了一些时间来解决问题,但对我来说,它似乎是那里最酷的声明性语言。这就是为什么最近,在使用Scala进行了两年的函数式编程之后,我决定再次看一下逻辑编程,以“训练我的大脑”或更好地实际使用。

结合功能和逻辑编程似乎对我学习/巩固两种声明范式的概念很有吸引力。我发现强力型系统非常有用且引人入胜。

Scala真的与互操作一起闪耀。我们不要重新发明轮子。它应该能够用另一种主要语言调用代码,并且最好也可以调用。但它不一定是Java。 C或Haskell也可以。

那么,今天最有用和最具启发性的FLP语言,您对它们的看法和建议是什么?

这是我到目前为止所发现的:

  1. Mercury:声称是快速,强力打字的Prolog。纯粹的声明,但没有逻辑变量!没有约束编程?似乎是使用最广泛的FLP。互操作??

  2. Curry:看起来很有前途,也是最先进的,但现在文档上有点低。 “实验”是否意味着不成熟/不准备潜入?只是基于Haskell或实际上与Haskell的良好互操作?

  3. Ciao:似乎提供了我想要的许多功能,但Stack Overflow似乎根本不知道它,虽然它自1984年以来就存在了?它出什么问题了?互操作

  4. drools(java library / DSL):声称它允许混合前向和后向链接。成熟。直接与Java / Scala互操作,但依赖于可变数据/命令式构造?它与功能JVM语言的集成程度如何?

  5. miniKanren:几个平台上都存在实现。如何互操作?高效?

  6. Lambda Prolog实现,例如:

    1. Caledon:可能很好,但理论很重。有用?与Haskell有效互操作?文档?

    2. Teyjus。类似于卡利登。

  7. 良好但理论上的阅读并偏向于咖喱而不是解决实际问题:

2 个答案:

答案 0 :(得分:4)

我可以给你一个(稍微)有偏见的Curry建议。

正如你已经提到的那样,Curry非常先进,虽然仍处于试验阶段,但已经准备就绪。已有应用程序在生产中使用。由于库里主要是一种研究语言,因此您不会发现许多关于实践方面的内容。然而,有一个小但有用的社区阅读和回答咖喱邮件列表:

http://www-ps.informatik.uni-kiel.de/currywiki/documentation/mailing

关于互操作性,似乎有两种选择:明斯特咖喱编译器(MCC)支持Haskell外部函数接口的子集来调用C代码。

最近的Curry实施,基尔咖喱系统2(KiCS2),将Curry编译为Haskell。有一种在使用时从Curry调用Haskell代码的示意方法 KiCS2(见KiCS2 Manual,附录D)。不幸的是,我不知道 从另一种语言调用Curry代码的方法。

答案 1 :(得分:0)

据我所知,FP和LP最有用的关系是Mercury + Erlang。从学术角度来看,这两者都很有意思(如果你想用两种方法做好事,或者两者兼而有之,你真的需要把你的基本面做好),但两者都非常重视将产品推向市场并保持相反研究奇怪。

我不确定OP是否加权"有用"超过"指导",我也不知道"有用"意味着有用地解决现实世界中的问题的代码"。但是假设这是这里标准的一部分,Mercury + Erlang是迄今为止最有趣的LP和FP组合。