最有用和有益的功能
我对Prolog的力量感到非常惊讶。 花了一段时间才弄到头,但对我来说,它似乎是最酷的声明性语言。 这就是为什么最近,经过两年对Scala的一些函数式编程之后,我决定再次看看逻辑编程,以“训练我的大脑”或更好的实际使用。
将功能和逻辑编程相结合似乎对我学习/巩固这两种声明式范例的概念很有吸引力。 我发现还有很强大的类型系统非常有用和引人入胜。
斯卡拉真的与互联网闪闪发光。 我们不要重新发明轮子。 它应该能够以另一种主要语言调用代码,并且也可以被调用。 但它不一定是Java。 C或Haskell也可以。
那么,哪些是当今最有用和最具启发性的FLP语言,以及您对它们有何看法和建议?
这是我到目前为止发现的:
水星:声称是快速,强类型的Prolog。 纯声明性的,但没有逻辑变量! 没有约束编程? 似乎是使用最广泛的FLP。 互操作?
库里:看起来很有前途,也是最先进的,但现在的文档有点低。 “实验”是否意味着不成熟/不准备潜入? 只是基于Haskell或与Haskell实际上良好的互操作性?
Ciao:似乎提供了很多我想要的功能,但Stack Overflow似乎根本不知道它,尽管它自1984年以来就存在了? 它出什么问题了? 互操作?
drools(java库/ DSL):声称它允许混合前向和后向链接。 成熟。 直接与Java / Scala交互,但依赖可变数据/命令式结构? 它如何与功能性JVM语言集成?
miniKanren:实现存在于多个平台上。 interop如何? 高效?
Lambda Prolog实现,如:
卡利登:可能会很好,但理论很重。 用处? 与Haskell有效的互操作? 文档?
Teyjus。 类似于Caledon。
不错,但理论上读起来并偏向于咖喱,而不是解决实际问题:
http://doi.acm.org/10.1145/1721654.1721675
http://www.informatik.uni-kiel.de/~mh/slides/ETAPS00.pdf
我可以给你一个(略)偏向于库里的建议。
正如你已经提到的,咖喱是相当先进的,虽然仍然是实验性的,但一定可以使用。 已经有生产应用的应用。 由于库里主要是一门研究语言,因此你不会在实际方面找到很多内容。 然而,有一个小而有用的社区阅读和回答咖喱邮件列表:
http://www-ps.informatik.uni-kiel.de/currywiki/documentation/mailing
关于互操作性,似乎有两种选择:MünsterCurry Compiler(MCC)支持Haskell外部函数接口的一个子集来调用C代码。
最近的Curry实现,Kiel Curry System 2(KiCS2),将Curry编译成Haskell。 在使用KiCS2时,有一种示意性的方式可以从库里调用Haskell代码(参见KiCS2手册,附录D)。 不幸的是,我不知道从另一种语言调用库里代码的方法。
据我所知,FP和LP最深刻有用的联系是Mercury + Erlang。 从学术的角度来看,这两者都是非常有趣的(如果你想用两者或者两者来做好事情,你确实需要让自己的基本原理变得直白),但是两者都非常重视产品的上市和维护,以研究古怪。
我不确定OP是否比“有益”更重要的“有用”,我也不知道“有用”是指“有效解决现实世界中的问题的代码”。 但假设这是这里标准的一部分,Mercury + Erlang是目前为止LP和FP最有趣的组合。
链接地址: http://www.djcxy.com/p/79409.html