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

对Prolog的感想和我写的一些教程的更多相关文章

  1. 几年前做家教写的C教程(之一)

    C语言学习宝典 首先让我们认识什么是C语言. C语言是一种计算机开发语言,是一种非常基础的开发语言.能够用C语言做很多事情.C语言是顺序执行的程序. 程序应该包括数据描述,数据操作. C语言的数据类型 ...

  2. 参考sectools,每个人至少查找5种安全工具、库等信息并深入研究至少两种并写出使用教程

    1.Nessus Nessus是免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不仅能永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户 ...

  3. 几年前做家教写的C教程(之五专讲结构体与文件操作)

    C语言学习宝典(5) 结构体: 将不同类型的数据组合成为一个有机的整体,这个整体就是一个结构体. 例如: Struct student { Int name; Char sex; Float scor ...

  4. 几年前做家教写的C教程(之四专讲了指针与汉诺塔问题)

    C语言学习宝典(4) 指针:可以有效的表示复杂的数据结构,能动态的分配动态空间,方便的使用字符串,有效的使用数组,能直接处理内存单元 不掌握指针就没有掌握C语言的精华 地址:系统为每一个变量分配一个内 ...

  5. 几年前做家教写的C教程(之三专讲了递归和斐波那契)

    C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符  数组名[常量表达式] 例如: int  a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...

  6. 几年前做家教写的C教程(之二)

    C语言学习宝典(2) 认识C语言中的运算符: (1)算术运算符   (+  -  *  /  %) (2)关系运算符    (>  <  ==  >=  <=  != ) (3 ...

  7. 我写了个教程《一步步教你把ubuntu安装到U盘》

    一步步教你把ubuntu安装到U盘 作者 Val 2452013147@qq.com 原因: 由于某些原因(学生党),需要把ubuntu安装到U盘到处走,百度了一下,教程都不是很好,要么很复杂,要么不 ...

  8. JavaScript写一个拼图游戏

    拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)?  因为图片是一整张jpg或 ...

  9. Hibernate写配置文件无提示信息解决

    把Hibernate的相关jar包引入工程后,在配置hibernate.cfg.xml时没有提示信息,对于开发人员来说,那么多标签,标签有那么多属性,全部都记住显然是不可能的,遇到这种情况是很头疼的事 ...

随机推荐

  1. Android studio ocr初级app开发问题汇总(含工程代码)

    博客第一篇文章,稍作修改,增加文字介绍 开发目的 最近由于某些需求,需要在Android手机端实现OCR功能,大致为通过手机照相,识别出相片中的中文信息字段.但是由于新手光环+流程不熟悉,遇到了各种各 ...

  2. 内置模块之sys

    一.模块sys sys模块主要对解释器相关的操作 1.常用方法和属性 sys.argv    命令行参数List,第一个元素是程序本身路径 sys.exit(n)  退出程序,正常退出时exit(0) ...

  3. 关于Oracle伪列rownum

    rownum列跟rowid列不一样,虽然同为表的伪列.但是rowid列是列的一个固定属性,而rownum列是结果集的一个排序.所以像如下查询是不会返回结果的:select rowid,rownum,e ...

  4. August 23rd 2017 Week 34th Wednesday

    Do not pray for easy lives. Pray to be stronger men. 不要祈祷舒适的生活,而是祈祷自己能变得更强大. It seems this quotation ...

  5. Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹

    package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public clas ...

  6. video设置视频的播放位置(本例中实现效果是视频第一次播放完成后,接下来中从视频的中间部位开始循环播放)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. apache2 重启、停止、优雅重启、优雅停止

    停止或者重新启动Apache有两种发送信号的方法 第一种方法: 直接使用linux的kill命令向运行中的进程发送信号.你也许你会注意到你的系统里运行着很多httpd进程.但你不应该直接对它们中的任何 ...

  8. 【JavaScript】particle

    这是js实现的粒子动画,有两种模式,分别是zoom和line,它们对应的效果不同,但是原理都相同,具体分析如下: 部分程序如下: var p = this; p.originParams = orig ...

  9. FreeMarker之根据模板生成Java代码

    FreeMarker根据模板生成Java代码,光这句话,大家想必也知道它的应用了,比如流行的DRY原则,该原则的意思,可简单概述为"不要写重复的代码". 比如Java中三层架构,数 ...

  10. POJ 1157 LITTLE SHOP OF FLOWERS (超级经典dp,两种解法)

    You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flo ...