为什么说学习Prolog语言能让你成为更好的程序员

在计算机教学的课程中,有个传统的现象,是否学过某一两种的课程能够成为判断一个人能否深入理解一些计算机科学概念的分水岭。尽管每个人都似乎能够使用像Java这样的语言进行编程,但一些有趣的证据现象表明,计算机科学中最复杂的概念还是class,其中蕴含了很多真正的智慧,能对你在C或Lisp语言的使用中提供很有用处的帮助。

在我的母校,一门关于Prolog的课程成了区分那些似是而非的和真正的计算科学学生之间的分界线。原因就在于,如果你的大脑能理解一个用Prolog写成的Prolog解释器,那么,你差不多就掌握了任何的编程概念。

然而,如今,学校里更感兴趣的是那些市场化的语言,诸如Java、Python。就好像是他们在追求以最快的速度教会人们如何编程(也许他们没有意识到,但他们确实是在这样做)。

关于Prolog的小事

Prolog如今不像以前那样流行,想当年它曾经是Lisp语言的强有力竞争者(至少对于欧洲的研究人工智能的人是这样的)。然而,人们通常会认为学习Lisp更具优势,即使是从学习体验上讲。

可是我认为说Prolog也具有同样的优势也不为过,有一些理由能说明为什么Prolog对大多数程序员来说仍然有很大的去学习的价值。

Prolog是纯函数式语言。事实上,它是如此纯粹,连它唯一能返回的值仅是字面上的truefalse。在Prolog里,任何操作都和参数的绑定有关,所以,没有变量的修改更新——只有方法的调用。

这种语言提供了一种很简单的访问数据库的机制。在Prolog里,数据库被看作是一个可以根据某种规则来查看的信息的集合。通过这种方式,对外部数据的访问只是被当做一种逻辑形式,不需要你做必须的操作来取回和读数据。Prolog的这种模式减少了代码和数据之间的阻抗,是一种很好的方式。

提供了一种简单的方式来表达解释性的程序。Prolog是一种基于规则匹配的语言,这种方式对于程序员是透明的。它力图通过其内部的规则匹配引擎来满足各个布尔型函数的需求。你可以简单的把它想象成一个不确定的状态机,在你需要它的时候能做出正确的事情,不需要编程活动的介入。当然,这种机制在没有其它条件帮助的情况在并不能解决所有的问题,但它是很必要的,它能把开发人员从思考事情如何做成中解脱出来,转而集中关注有哪些已经被完成。

总之,我认为好的程序员应该积极去发现不同方式的开发软件的途径。用一种不同的思维模式学习编程语言,比如逻辑性编程,这将会是对于传统的思维过程是一种精彩的挑战。通过学习Prolog里程序是如何实现的,你能获得一种更好的解决现实问题的思路,即使你需要实现的软件是用C写成的。

学习资料

关于Prolog的文献并没有多少,但有一本经典的书叫做《The Craft of Prolog》。这本书放在那里我已经好几年没动过了,但我最初开始研究这种语言时,它给我带来了很多的快乐。在你使用这种语言来工作时,这本书仍然会成为你最好的Prolog知识的源泉。

[英文原文:Why Learning Prolog Can Make You a Better Programmer ]
分享这篇文章:

9 Responses to 为什么说学习Prolog语言能让你成为更好的程序员

  1. kira0001 says:

    为了在研究室打工,去学了prolog。学的时候还好,用起来却是痛苦异常。。。
    没有变量,很多简单的操作都要靠“小技巧”来实现。大量的递归,常常让我担心它会不会崩溃(还好,从来没崩过)。虽然是纯函数式,但也有“!”之类很难用的特例。
    总之是不想再碰它了……orz

  2. 刺客 says:

    学习OCaml中,听说Prolog挺复杂的

  3. momo5269 says:

    当然,学Lisp也能让你成为更好的程序员~~

  4. 胡述印 says:

    大学期间学习过这个语言,一直到毕业后很久对这个语言还兴趣不减,甚至还用这个语言开发过一些应用软件。这种语言最大的好处是概念少,简单易学,用它写出来的软件代码很短,运行速度很快。我记得当时写过一个评选数据(6万个数据)统计软件,别人之前用数据库工具实现需要40页程序,我只用了4页就实现了,而且运行很好。

    • Jerry Lee says:

      @胡述印
      > 记得当时写过一个评选数据(6万个数据)统计软件,别人之前用数据库工具实现需要40页程序,我只用了4页就实现了,而且运行很好。

      这样实际应用,把代码放出来吧,可以学习一下~

  5. dongguangming 对这篇文章的反应是
  6. aaaa 对这篇文章的反应是飘过~标题党
  7. aaaa 对这篇文章的反应是很实用
  8. ZJC 对这篇文章的反应是好文

发表评论

电子邮件地址不会被公开。 必填项已用*标注