对Prolog的感想和我写的一些教程


我第一次见到Prolog这门独特的编程语言是在《七周七语言(Seven Languages in Seven Weeks)》中看到的。《七周七语言》名字看起来与市面上什么《三十天……从入门到精通》之类的垃圾书类似,但完全不是那回事。《七周七语言》的目标在于让读者了解到这些语言独有的编程思想和设计模式。而且它也不是什么入门书。Prolog是门声明式编程语言,它与我们平时最常遇到的命令式编程语言有很大的不同。命令式语言需要你精确地告诉计算机如何完成一项工作,而声明式语言则是需要你提供信息和推论而无需知道如何做。

Prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人。而且它的程序和数据高度统一。比如一般的编程语言,提示你输入的内容是作为字符串或是为相应的变量赋值,而它是可以直接参与到程序中。如果说汇编语言和C语言是最接近硬件底层,最能反映计算机工作原理的;那么Lisp和Prolog则是最能反映计算和逻辑本身的,高度抽象。

《七周七语言》中,将它比喻为“雨人”。Prolog这门语言有时特别聪明,有时又特别令人失望。只有当你知道如何提问时,你才会得到令人惊奇的答案。它的编程的时的思考模式的确令人吃惊。Prolog的穷举特性不禁让人想起蚂蚁寻找最短路线的过程。比如蚁巢派出许多蚂蚁,去寻找到食物之间的最短路线。选择机制很简单:在探路的蚂蚁中,走最短路线的蚂蚁肯定比其他同伴能更快地回到蚁巢。而且,最短路线比其他路线的气味更大,后来的蚂蚁会沿着气味最大的路线走,因而又加强了这条路上的气味。也许可能未来Prolog的设计趋势可能会加入更高层次的分布式处理吧。

Prolog确实不是通用的编程语言,但它这种声明逻辑式编程语言在计算机科学中的地位是很高的,就好比中文系教授不可能上电视当名嘴一样。上个世纪80年代,在全球颁发了无数个逻辑程序设计领域的计算机科学博士。我们的宿敌日本还投入了数以亿计的研发资金,计划制造第五代计算机,虽然总体而言,小日本的野心失败了(野心勃勃的日本第五代计算机,如何一步步走向失败)。至少Prolog在功能上是完备的。SWI-Prolog内部有调用C语言、Java等编程语言的库(这段程序完全不需要什么中间语言,就自动生成R语言的函数,连R语言的语法都被嵌套了进去:r_demo.pl)。Prolog在自然语言处理、自动调整系统、专家系统中发挥着重大作用。

这里面有一篇趣文是关于Prolog的:。

我在百度经验上写过一系列非常基础的Prolog教程,希望能够帮到你。为了写这些教程,除了参考了网络资料,还参考了《用Prolog和Turbo Prolog语言开发专家系统》(不过我的教程里用的是SWI-Prolog)、《七周七语言》等书籍。关于Prolog的现存书籍真的太少了,网络资料也很少。去年在学校的图书馆搜索引擎中找到了,但第一次去时发现它已被移库了,可能书太老了。后来又找了一次才找到。可惜百度经验将杂志功能取消了,不得不将链接分别发出来。建议按顺序阅读:
配置SWI-Prolog编程环境
Prolog的基本概念和语法规则
Prolog规则结构与实例
SWI-Prolog的调试
SWI-Prolog的算术运算
SWI-Prolog的递归
SWI-Prolog的截断机制
用Prolog实现过程
Prolog的数据结构
Prolog的输入和输出和文件操作
以后会在博客上写一些关于Prolog更为复杂的内容(也许)。