Prolog专业有用吗?


15

多年前,我在大学学习了Prolog。在我的职业生涯中,我从未需要使用Prolog。我错过了一些特别的东西吗?

据我所知,与著名的编程语言相比,Prolog需要完全不同的思维方式。

Prolog是否真的曾经被用来实现某些专业上有用的东西?


3
Prolog(和poplog)对于AI编码非常有用。如果您不是专业/认真地从事与AI相关的工作,则可能根本不使用它。就像非工程师可能永远不会认真使用MATLAB一样。
glasnt 2011年

1
好问题。Prolog是Uni Potsdam在计算语言学中教授的第一门编程语言,但是在那之后,即使我们非常擅长,我们也不会真正使用它。真遗憾。每当我在StackOverflow上看到诸如“如何使用累加器”或“如何获得所有可能的答案”之类的问题时,都会让我想知道实际的专业用户在哪里–大多数东西似乎都是作业。也许Prolog的熟练程度会让您变成一个从来没有问题的机器人。
Felix Dombek

我曾经听说过用Prolog编写的故障检测系统,该系统已在奥地利的某个地方(克拉根福(Klagenfurt?))实施。根据告诉我的消息,该产品非常好,已经出售给客户。如果您认为这“专业有用”,那么答案是“是”。
乔治

Answers:


12

我认为,无论您是否会在现实世界中使用Prolog的基础知识,都是非常值得的。了解统一基础的基本思想以及如何处理(琐碎而低效的)实现也是非常值得的。

如果您有使用声明式逻辑可以最好地解决的问题,则理想情况下,您应该认识到这一点,并且知道(如果可以选择)为该工作使用正确的工具。

但是,我同意Prolog需要与传统命令式语言截然不同的心态,也需要与功能性语言截然不同的心态。除了某个点之外,它似乎需要大量的经验(就像其他任何事情一样),甚至还有很多“教科书”知识使我的大脑从耳朵里运出。

我的印象是……我们都可能某种程度上缺少一些特别的东西,但是将时间花在学习Prolog甚至是相当完整的教科书级别的知识上是不切实际的,更不用说尝试发展现实世界的经验了。 ,除非您正在考虑可能的逻辑编程职业。

我最近一直在阅读1989年出版的关于人工智能和专家系统的书-在二手书店里很幸运。重要的是,这是有关Lisp和Prolog的专门教程。的确,它涵盖的大多数内容在相当长的一段时间内都没有令人印象深刻(搜索,启发式等),但是它仍然非常有趣,并且IMO是值得花一些时间投入的东西。

较新的书专门描述了Prolog,对于学习该语言而言会更好,但是这样做的风险是,您的大脑会从中级到高级的材料中的某个地方运出您的耳朵。


AI / prolog新手在这里。您会推荐任何在线资源吗?
yati sagade 2011年

@yati-尝试amzi.com/AdventureInProlog/advtop.php-我曾经在Amzi网站上浏览过一个教程,据我记得,这似乎还不错,但这是很久以前的事情了。我最近(大概是过去5年)查看的Prolog就是我在此答案中提到的AI书。您应该在此处搜索/询问问题,而不要发布评论,尤其是添加到基本上是长期新手的人的答案中的评论。Prolog是我很少看的东西,而且深度也不是很深-否则十年或更早以前我就不再是新手了。
Steve314 2011年

10

这不是我,但假设问题可能是“有人用序言实施了严肃的事情吗?” 这可能算:

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进行部署和集成。



6

Prolog非常适合快速原型制作。例如,在http://www.cri.ensmp.fr/classement/doc/A-381.pdf中,GCC的SSA转换首先在Prolog中实现,然后在C中实现。

我在编译器内部使用Prolog来实现类型系统的快速,肮脏的实现,某些优化和语义检查,并且只有在性能不可接受的情况下,我才将该Prolog代码重写为必要的命令。


2

您回答得很快,但我在90年代中期使用Prolog设计了保险费率计算器,该计算器将为我们确定适合保费率的某些客户群(读取风险)。您不一定每天都会看到此信息,但多年来肯定会影响您的财产险保费。


2

根据(This FAQ),使用Jeopardy的IBM机器Watson的1部分是用序言编写的。(请参阅问题6)


1

在少数情况下(诊断专家系统,HTML转换,设置成员资格),我已经专业地使用过Prolog。我对这种语言怀有深厚的感情,是的,这里有一些偏见,但是很容易客观地确定Prolog何时(更多/恰如其分)适合-您确实需要处理递归结构;我能给出的最好的例子是关系数据库表,但是还有其他无数的例子(列举诸如随机用户输入或(大多数)数学函数之类的反例可能会更容易(但是,许多数学函数确实具有递归结构,因此非常合适(例如离散快速傅立叶变换)。

但是,当然,仅靠递归结构的处理就可以定义很少的“端到端系统”(例外:定理证明,但这是一个相当学术的练习*),因此很幸运,序言过程可以使用各种不同的技术移植到“更标准的命令性过程”中(无关紧要,但通常可以使用Web服务接口);因此,您可以处理UI,进行随机事件处理等,然后在必要时进行交接(用于执行复杂的数据库查询或您可能希望对递归结构进行的任何事情)。我发现它的效果非常好-比LINQ好。

因此-用敏感的位子获取递归结构,并编写一些可爱,干净,优雅,可维护的Prolog!:)

PS,当我不使用Prolog时,我会退回到C#

  • 虽然,我希望有一天至少可以证明商业程序作为标准做法是正确的。

1

尝试用您喜欢的语言编写一个数独求解器,然后在Prolog中检查它是如何完成的。通常,任何CLP问题都适合使用Prolog等声明性语言。

它也广泛用于硬件和软件的形式验证(学术上,也许是专业上,但是我对公司没有任何参考)。

最后,Erlang受到Prolog的深刻影响,并考虑了容错性和并发性。


0

使用高度优化的编译器,可以在Prolog中编写在美国和其他几个国家/地区读取和分类大量邮件的软件。邮件地址的语法是用定句语法编写的,这使维护变得容易,并简化了使阅读器适应不同国家和行业用户的约定。邮政服务通常具有复杂的规则集,例如转发地址,邮局信箱与街道地址等,这些规则也在Prolog中制定,以便于维护。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.