【外刊IT评论】为什么说学习Prolog语言能让你成为更好的程序员

标签: 心得体会 prolog 函数 | 发表时间:2011-04-21 00:07 | 作者:admin allenpatient
出处:http://www.aqee.net
本文是从 Why Learning Prolog Can Make You a Better Programmer 这篇文章翻译而来。 本人对这种语言不太熟悉,翻译中有些地方理解的可能不正确,欢迎指正。

在计算机教学的课程中,有个传统的现象,是否学过某一两种的课程能够成为判断一个人能否深入理解一些计算机科学概念的分水岭。尽管每个人都似乎能够使用像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知识的源泉。


本文原始地址:为什么说学习Prolog语言能让你成为更好的程序员

相关 [it 学习 prolog] 推荐:

【外刊IT评论】为什么说学习Prolog语言能让你成为更好的程序员

- allenpatient - 外刊IT评论
本文是从 Why Learning Prolog Can Make You a Better Programmer 这篇文章翻译而来. 本人对这种语言不太熟悉,翻译中有些地方理解的可能不正确,欢迎指正. 在计算机教学的课程中,有个传统的现象,是否学过某一两种的课程能够成为判断一个人能否深入理解一些计算机科学概念的分水岭.

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

mongo 学习

- - CSDN博客系统运维推荐文章
mongod 启动参数详解:. master 启动: ./mongod --dbpath /data/db/master --logpath /data/db/master.log --logappend  --fork --port 2717 --master --oplogSize 64 . slave 启动: ./mongod  --dbpath /data/db/slave  --logpath  /data/db/slaver.log --logappend  --fork  -port 27018  --slave --slavedelay 5 --autoresync --source localhost:27017  .

pushlet 学习

- - 企业架构 - ITeye博客
转自: http://blog.csdn.net/houpengfei111/article/details/7498481.     pushlet是一种comet实现,在servlet机制下,数据从server端的java对象直接推送(push)到(动态)HTML页面,而无需任何java applet或者插件的帮助.

Storm Trident 学习

- - 小火箭
Storm支持的三种语义:. 至少一次语义的Topology写法. 参考资料: Storm消息的可靠性保障 Storm提供了Acker的机制来保证数据至少被处理一次,是由编程人员决定是否使用这一特性,要使用这一特性需要:. 在Spout emit时添加一个MsgID,那么ack和fail方法将会被调用当Tuple被正确地处理了或发生了错误.

「学习笔记-Linux」学习Shell Script

- - CSDN博客系统运维推荐文章
学习Shell Script. 1 什么是Shell Scipt. 2.2 例2 按日期建立相似名字的文件. 3.2.4 整数,字符串,多重条件判断. 4 Shell Script 参数. 5.2 if else 结构. 8 shell script的追踪与Debug. 1 什么是Shell Scipt.

真正的学习

- Yuli - 左岸读书_blog
前天突然发现,身边很多人在当年读书时有神话般的表现,比方说一个哥们小学、初中与高中永远是全校第一名. 比方说,高中的同桌在一次期末考试前生病,在家休养一个月,回来时距离考试仅三四天时间,但没想到他一鸣惊人,从以前的十二三名跃居到第四名. 不过,所有这些神话,都远不如一个看起来有些愚笨的故事令我感动.

学习的艺术

- 白肥 - 左岸读书_blog
一个男嘉宾刚从后面的背景门后走出来,. 一个女嘉宾就以迅雷不及掩耳盗铃响叮当之势把灯按掉. 主持人问她:姑娘,你怎么这么快就把灯按了呀. 第三,我不喜欢个子矮还穿西装的. 我脑中马上想出一个画面:如果这位姑娘看到敬爱的小平同志的尊荣不知是何反应. 当我们初见一个人、初学一门技艺、初尝试一样新的菜式、或者初到一个陌生的地方、、、、、、.

学习JVM的References

- LightingMan - 淘宝JAVA中间件团队博客
本blog中列举了我学习JVM的references,会不断的更新,为了避免版权问题,就不在blog上提供references的下载了,感兴趣的同学可自行下载或购买,:). |— [ Hotspot GC论文 ]. |— [ 其他JVM GC ]. |— Linux内核源代码情景分析. |— Linux 内核中断内幕.