在计算机教学的课程中,有个传统的现象,是否学过某一两种的课程能够成为判断一个人能否深入理解一些计算机科学概念的分水岭。尽管每个人都似乎能够使用像Java这样的语言进行编程,但一些有趣的证据现象表明,计算机科学中最复杂的概念还是class,其中蕴含了很多真正的智慧,能对你在C或Lisp语言的使用中提供很有用处的帮助。
在我的母校,一门关于Prolog的课程成了区分那些似是而非的和真正的计算科学学生之间的分界线。原因就在于,如果你的大脑能理解一个用Prolog写成的Prolog解释器,那么,你差不多就掌握了任何的编程概念。
然而,如今,学校里更感兴趣的是那些市场化的语言,诸如Java、Python。就好像是他们在追求以最快的速度教会人们如何编程(也许他们没有意识到,但他们确实是在这样做)。
关于Prolog的小事
Prolog如今不像以前那样流行,想当年它曾经是Lisp语言的强有力竞争者(至少对于欧洲的研究人工智能的人是这样的)。然而,人们通常会认为学习Lisp更具优势,即使是从学习体验上讲。
可是我认为说Prolog也具有同样的优势也不为过,有一些理由能说明为什么Prolog对大多数程序员来说仍然有很大的去学习的价值。
Prolog是纯函数式语言。事实上,它是如此纯粹,连它唯一能返回的值仅是字面上的true或false。在Prolog里,任何操作都和参数的绑定有关,所以,没有变量的修改更新——只有方法的调用。
这种语言提供了一种很简单的访问数据库的机制。在Prolog里,数据库被看作是一个可以根据某种规则来查看的信息的集合。通过这种方式,对外部数据的访问只是被当做一种逻辑形式,不需要你做必须的操作来取回和读数据。Prolog的这种模式减少了代码和数据之间的阻抗,是一种很好的方式。
提供了一种简单的方式来表达解释性的程序。Prolog是一种基于规则匹配的语言,这种方式对于程序员是透明 的。它力图通过其内部的规则匹配引擎来满足各个布尔型函数的需求。你可以简单的把它想象成一个不确定的状态机,在你需要它的时候能做出正确的事情,不需要 编程活动的介入。当然,这种机制在没有其它条件帮助的情况在并不能解决所有的问题,但它是很必要的,它能把开发人员从思考事情如何做成中解脱出来,转而集 中关注有哪些已经被完成。
总之,我认为好的程序员应该积极去发现不同方式的开发软件的途径。用一种不同的思维模式学习编程语言,比如逻辑性编程,这将会是对于传统的思维过程 是一种精彩的挑战。通过学习Prolog里程序是如何实现的,你能获得一种更好的解决现实问题的思路,即使你需要实现的软件是用C写成的。
学习资料
关于Prolog的文献并没有多少,但有一本经典的书叫做《The Craft of Prolog》。这本书放在那里我已经好几年没动过了,但我最初开始研究这种语言时,它给我带来了很多的快乐。在你使用这种语言来工作时,这本书仍然会成为你最好的Prolog知识的源泉。
原文链接:http://www.oschina.net/news/17379/why-learning-prolog-can-make-you-a-better-programmer
【编辑推荐】