多年前,我在大学学习了Prolog。在我的职业生涯中,我从未需要使用Prolog。我错过了一些特别的东西吗?
据我所知,与著名的编程语言相比,Prolog需要完全不同的思维方式。
Prolog是否真的曾经被用来实现某些专业上有用的东西?
多年前,我在大学学习了Prolog。在我的职业生涯中,我从未需要使用Prolog。我错过了一些特别的东西吗?
据我所知,与著名的编程语言相比,Prolog需要完全不同的思维方式。
Prolog是否真的曾经被用来实现某些专业上有用的东西?
Answers:
我认为,无论您是否会在现实世界中使用Prolog的基础知识,都是非常值得的。了解统一基础的基本思想以及如何处理(琐碎而低效的)实现也是非常值得的。
如果您有使用声明式逻辑可以最好地解决的问题,则理想情况下,您应该认识到这一点,并且知道(如果可以选择)为该工作使用正确的工具。
但是,我同意Prolog需要与传统命令式语言截然不同的心态,也需要与功能性语言截然不同的心态。除了某个点之外,它似乎需要大量的经验(就像其他任何事情一样),甚至还有很多“教科书”知识使我的大脑从耳朵里运出。
我的印象是……我们都可能在某种程度上都缺少一些特别的东西,但是将时间花在学习Prolog甚至是相当完整的教科书级别的知识上是不切实际的,更不用说尝试发展现实世界的经验了。 ,除非您正在考虑可能的逻辑编程职业。
我最近一直在阅读1989年出版的关于人工智能和专家系统的书-在二手书店里很幸运。重要的是,这是有关Lisp和Prolog的专门教程。的确,它涵盖的大多数内容在相当长的一段时间内都没有令人印象深刻(搜索,启发式等),但是它仍然非常有趣,并且IMO是值得花一些时间投入的东西。
较新的书专门描述了Prolog,对于学习该语言而言会更好,但是这样做的风险是,您的大脑会从中级到高级的材料中的某个地方运出您的耳朵。
这不是我,但假设问题可能是“有人用序言实施了严肃的事情吗?” 这可能算:
http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html
Watson由运行Linux的10架IBM Power 750服务器提供动力,并使用15 TB的RAM,2,880个处理器内核,并能够以80 terflops的速度运行。Watson主要用Java编写,但是大量代码也用C ++和Prolog编写,所有组件都使用UIMA进行部署和集成。
我知道AI程序员会使用它.....因为我在AI课堂上参加了Prolog课程,但除此之外,我还没有看到其他关于它的话题。这是一个有很多答案的类似问题! /programming/130097/real-world-prolog-usage
Prolog非常适合快速原型制作。例如,在http://www.cri.ensmp.fr/classement/doc/A-381.pdf中,GCC的SSA转换首先在Prolog中实现,然后在C中实现。
我在编译器内部使用Prolog来实现类型系统的快速,肮脏的实现,某些优化和语义检查,并且只有在性能不可接受的情况下,我才将该Prolog代码重写为必要的命令。
在少数情况下(诊断专家系统,HTML转换,设置成员资格),我已经专业地使用过Prolog。我对这种语言怀有深厚的感情,是的,这里有一些偏见,但是很容易客观地确定Prolog何时(更多/恰如其分)适合-您确实需要处理递归结构;我能给出的最好的例子是关系数据库表,但是还有其他无数的例子(列举诸如随机用户输入或(大多数)数学函数之类的反例可能会更容易(但是,许多数学函数确实具有递归结构,因此非常合适(例如离散快速傅立叶变换)。
但是,当然,仅靠递归结构的处理就可以定义很少的“端到端系统”(例外:定理证明,但这是一个相当学术的练习*),因此很幸运,序言过程可以使用各种不同的技术移植到“更标准的命令性过程”中(无关紧要,但通常可以使用Web服务接口);因此,您可以处理UI,进行随机事件处理等,然后在必要时进行交接(用于执行复杂的数据库查询或您可能希望对递归结构进行的任何事情)。我发现它的效果非常好-比LINQ好。
因此-用敏感的位子获取递归结构,并编写一些可爱,干净,优雅,可维护的Prolog!:)
PS,当我不使用Prolog时,我会退回到C#