快速在 Prolog 中运行

Posted

技术标签:

【中文标题】快速在 Prolog 中运行【英文标题】:Becoming operational in Prolog quickly 【发布时间】:2010-12-31 16:00:45 【问题描述】:

我的公司有一个在 Prolog 中运行的项目,我想澄清一些关于如何学习它的事情。我知道 Prolog 是不同的。它不应该像任何其他语言一样学习。

话虽如此,考虑到我还没有接触任何 Prolog 书籍这一事实,是否有任何书籍或在线资源可以让我像学习 C/C++ 一样学习 Prolog?我的意思是,要在 C/C++ 中运行,你只需要知道程序的结构,比如main loopsconditionsbranches,以及很少的functions,你可以用于开始用 C/C++ 编写基本程序。

这样我就可以学习 Prolog,有没有什么书可以让我了解如何在 Prolog 中编程? (基础、循环、条件如何实现、程序结构、谓词是什么?如何使用?如何定义?等等……)。

【问题讨论】:

我并不是要破坏派对,但请考虑一下 Peter Norvig 在他的博客上写的关于 Teach Yourself Programming in Ten Years 的内容。 【参考方案1】:

如果你想要一本书,我强烈推荐"The Art of Prolog":

从 C/C++ 之类的东西进入 Prolog 不仅仅是学习编程语言的问题。这是关于编程的完全不同的思考方式

Prolog 是关于向计算机提问(或“查询”,如果您愿意)。计算几乎是计算机试图回答您的问题的副作用。 没有有意义的循环或条件等价物,因为 prolog 程序员不会以这些术语思考。

一个好的 Prolog 程序看起来像是对您尝试解决的问题的描述,分解为递归案例和子问题,而不是组织成函数或类的指令列表。

学习 Prolog 的最佳方式是抛开所有以前的编程经验。实际上考虑 C 和 C++ 会使 Prolog 更难学习和使用。尝试采用初学者的思维方式,也许是一种更像代数而不是程序员的方法。

【讨论】:

感谢您提出有趣的建议。 +1 总的来说,我认为这个答案很有帮助,但我不会过分说完全忘记你所有的其他编程经验。可以在 Prolog 中编写以命令式方式运行的代码(例如,借助剪切),有时这样做很方便。此外,您应该始终考虑您正在创建的算法的复杂性。当你问它一个问题时,你仍然需要考虑机器实际上会做什么。事先了解算法和复杂性在这里会很有用。【参考方案2】:

作为其他答案中提到的 Prolog 教程和教科书的补充,我建议您快速浏览一下这个简短的文档:

Prolog for Imperative Programmers

我认为这是您正在寻找的内容的一部分。它不会教你 Prolog,但它会帮助弥合理解 Prolog 的差距。它使用经验丰富的非 Prolog 程序员可以理解的术语来描述 Prolog 的基础知识。例如,它向您展示了 Prolog 中的控制结构,即序列、选择和重复。不过,它确实假设您已经开始学习 Prolog。

如果你想用你已经知道的东西来理解新的东西,那很好。但是,有了这些知识/理解,您最终可能会以 Prolog 语法编写 C 代码。祝你好运!

【讨论】:

【参考方案3】:

Learn Prolog Now 有什么问题,这通常是每次被问到此类问题时的首选?

它可能无法准确地为您提供所需的术语——我相信它甚至没有提到“谓词”(使用“事实、规则和查询”)或“循环”(它只是展示了如何使用递归而是)——但是一旦概念清晰就正确地使用术语应该是简单、快速和容易的,而且“立即学习 Prolog”似乎确实在使概念清晰方面做得很好。

【讨论】:

谢谢,我将从这个开始,我期待更多的答案。

以上是关于快速在 Prolog 中运行的主要内容,如果未能解决你的问题,请参考以下文章

SWI Prolog与GNU Prolog - SWI下的CLP(FD)问题

SPOJ Prime or Not - 快速乘 - 快速幂

Pyswip错误:系统无法找到指定的注册表项或值

是否有自动并行序言实现?

在 Swi-prolog 中增加运行时的堆栈大小

Prolog 目标运行时间成本的真实抽象度量