人工智能语言――
Prolog 语言教程
素材来源于:中国人工智能网
闫净斌收集整理
2011-10-27
目目目目 录录录录
第 0 章 人工智能语言—PROLOG 简介.......................................................................... 1
一、什么是人工智能语言....................................................................................1
二、Prolog 语言及其基本结构.............................................................................2
1、事实..................................................................................................... 2
2、规则..................................................................................................... 2
3、目标(问题)....................................................................................... 2
三、Prolog 程序的简单例子................................................................................ 3
四、Prolog 语言的常用版本................................................................................ 4
1、Turbo Prolog........................................................................................... 4
2、PDC Prolog.............................................................................................4
3、Visual Prolog...........................................................................................5
第 1 章-补充教程(写在正式教程的前面)....................................................................6
什么是 prolog?.................................................................................................. 6
一个例子............................................................................................................ 6
再看一个例子:................................................................................................10
为什么要 prolog................................................................................................ 11
prolog 的特点.................................................................................................... 11
1. prolog 程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程
序的人.......................................................................................................12
2. prolog 程序中没有 if、when、case、for 这样的控制流程语句...................12
3. prolog 程序和数据高度统一.................................................................... 12
4. prolog 程序实际上是一个智能数据库...................................................... 12
5. 强大的递归功能.................................................................................... 12
第 2 章-入门............................................................................................................ 14
探索 Prolog....................................................................................................... 14
进入 Prolog 世界............................................................................................... 14
逻辑编程.......................................................................................................... 14
进入下一章.......................................................................................................16
第 3 章-事实............................................................................................................ 17
事实 (facts).......................................................................................................17
寻找 Nani..........................................................................................................19
第 4 章-简单查询..................................................................................................... 22
查询的工作原理................................................................................................26
第 5 章-混合查询..................................................................................................... 29
混合查询.......................................................................................................... 29
内部谓词.......................................................................................................... 32
第 6 章-规则............................................................................................................ 38
规则................................................................................................................. 38
i
规则的工作原理................................................................................................40
使用规则.......................................................................................................... 45
第 7 章-小结............................................................................................................ 51
小结................................................................................................................. 51
第 8 章-算术............................................................................................................ 55
第 9 章-数据管理..................................................................................................... 58
第 10 章-递归.......................................................................................................... 64
递归的工作原理................................................................................................67
优化................................................................................................................. 73
第 11 章-联合.......................................................................................................... 75
第 12 章-数据结构................................................................................................... 82
第 13 章-列表.......................................................................................................... 89
使用列表.........................................................................................................102
第 14 章-操作符................................................................................................... 107
第 15 章-截断.........................................................................................................118
使用 Cut..........................................................................................................120
第 16 章-流程控制..................................................................................................124
递归循环.........................................................................................................127
尾递归............................................................................................................ 135
第 17 章-自然语言..................................................................................................139
差异表............................................................................................................ 142
寻找 nani.........................................................................................................147
Definite Clasue Grammar(DCG).........................................................................153
读入句子.........................................................................................................155
第 18 章 C 语言调用 Prolog Amzi 逻辑服务器........................................................ 159
第 19 章 Prolog 调用 C 语言 - 以扩展谓词为例..................................................... 166
定义扩展谓词..................................................................................................166
ii
PROLOG
人工智能语言————PROLOG
人工智能语言
第第第第 0000 章章章章 人工智能语言
PROLOG 简介简介简介简介
人工智能语言
PROLOG
人工智能语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推
理能力的计算机程序设计语言,其中 Prolog 是当代最有影响的人工智能语言之
一。
一、什么是人工智能语言
人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和
逻辑推理能力的计算机程序设计语言。能够用它来编写程序求解非数值计算、知
识处理、推理、规划、决策等具有智能的各种复杂问题。
典型的人工智能语言主要有 LISP、Prolog、Smaltalk、C++等。
一般来说,人工智能语言应具备如下特点:
• 具有符号处理能力(即非数值处理能力);
• 适合于结构化程序设计,编程容易;
• 具有递归功能和回溯功能;
• 具有人机交互能力;
• 适合于推理;
• 既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹
配机制。
人们可能会问,用人工智能语言解决问题与传统的方法有什么区别呢?
传统方法通常把问题的全部知识以各种的模型表达在固定程序中,问题的求解完
全在程序制导下按着预先安排好的步骤一步一步(逐条)执行。解决问题的思路
与冯.诺依曼式计算机结构相吻合。当前大型数据库法、数学模型法、统计方法
等都是严格结构化的方法。
对于人工智能技术要解决的问题,往往无法把全部知识都体现在固定的程序中。
通常需要建立一个知识库(包含事实和推理规则),程序根据环境和所给的输入
信息以及所要解决的问题来决定自己的行动,所以它是在环境模式的制导下的推
理过程。这种方法有极大的灵活性、对话能力、有自我解释能力和学习能力。这
种方法对解决一些条件和目标不大明确或不完备,(即不能很好地形式化,不好
描述)的非结构化问题比传统方法好,它通常采用启发式、试探法策略来解决问
题。
1
Prolog
Prolog
二、Prolog
Prolog 语言及其基本结构
Prolog 是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维
和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应
用,已经成为人工智能应用领域的强有力的开发语言。
尽管 Prolog 语言有许多版本,但它们的核心部分都是一样的。Prolog 的基本语
句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序
逻辑性强,文法简捷,清晰易懂。另一方面,Prolog 是陈述性语言,一旦给它
提交必要的事实和规则之后,Prolog 就使用内部的演绎推理机制自动求解程序
给定的目标,而不需要在程序中列出详细的求解步骤。
1、事实1、事实1、事实1、事实
事实用来说明一个问题中已知的对象和它们之间的关系。在 Prolog 程序中,事
实由谓词名及用括号括起来的一个或几个对象组成。谓词和对象可由用户自己定
义。
例如,谓词 likes(bill,book).
是一个名为 like 的关系,表示对象 bill 和 book 之间有喜欢的关系。
2、规则2、规则2、规则2、规则
规则由几个互相有依赖性的简单句(谓词)组成,用来描述事实之间的依赖关系。
从形式上看,规则由左边表示结论的后件谓词和右边表示条件的前提谓词组成。
例如,规则 bird(X):-animal(X),has(X,feather).
表示凡是动物并且有羽毛,那么它就是鸟。
3、目标(问题)
3、目标(问题)
3、目标(问题)
3、目标(问题)
把事实和规则写进 Prolog 程序中后,就可以向 Prolog 询问有关问题的答案,询
问的问题就是程序运行的目标。目标的结构与事实或规则相同,可以是一个简单
的谓词,也可以是多个谓词的组合。目标分内、外两种,内部目标写在程序中,
外部目标在程序运行时由用户手工键入。
例如问题 ?-student(john).
表示“john 是学生吗?”
2
Prolog
Prolog
三、Prolog
Prolog 程序的简单例子
以下两个例子在 Turbo Prolog 2.0 环境下运行通过。
[ 注:一个 Turbo Prolog 程序至少包括谓词段、子句段和目标段三项。目标可
以包含在程序中,也可以在程序运行时给出。]
例 1 谁是 john 的朋友?
predicates /*谓词段,对要用的谓词名和参数进行说明*/
likes(symbol, symbol)
friend(symbol, symbol)
clauses /*子句段,存放所有的事实和规则*/
likes(bell,sports). /*前 4 行是事实*/
likes(mary,music).
likes(mary,sports).
likes(jane,smith).
friend(john,X):-likes(X,sports),likes(X,music). /*本行是规则*/
当上述事实与规则输入计算机后,运行该程序,用户就可以进行询问,如输入目
标:
friend(john,X)
即询问 john 的朋友是谁,,这时计算机的运行结果为:
X=mary (mary 是 john 的朋友)
1 Solution (得到了一个结果)
程序运行界面如下图所示:
例 2 汉诺塔问题:
有 N 个有孔的盘子,最初这些盘子都叠放在柱 a 上(如图 1),要求将这 N 个盘
子借助柱 b 从柱 a 移到柱 c(如图 2),移动时有以下限制:每次只能移动一个
盘子;大盘不能放在小盘上。问如何移动?
3
该问题可以采用递归法思想来求解,其源程序为:
predicates /*谓词段*/
hanoi(integer)
move(integer,symbol,symbol,symbol)
inform(symbol,symbol).
clauses /*子句段*/
hanoi(N):-move(N,a,b,c).
move(1,A,_,C):-inform(A,C),!.
move(N,A,B,C):-N1=N-1,move(N1,A,C,B),
inform(A,C),move(N1,B,A,C).
inform(Loc1,Loc2):-nl,write("移动 1 个盘子从柱" ,Loc1,"到柱",Loc2).
goal /*目标段,问移动 3 个盘子的方法*/
hanoi(3).
这个例子的目标包含在程序里面,因此运行时程序将直接输出所有结果。
程序运行界面如下图所示:
Prolog
Prolog
四、Prolog
Prolog 语言的常用版本
Prolog 语言最早是由法国马赛大学的 Colmerauer 和他的研究小组于 1972 年研
制成功。早期的 Prolog 版本都是解释型的,自 1986 年美国 Borland 公司推出编
译型 Prolog,即 Turbo Prolog 以后,Prolog 便很快在 PC 机上流行起来。后来又
经历了 PDC PROLOG、Visual Prolog 不同版本的发展。并行的逻辑语言也于 80
年代初开始研制,其中比较著名的有 PARLOG、Concurrent PROLOG 等。
Turbo
1111、、、、Turbo
Prolog
Turbo
Prolog
Turbo Prolog
Prolog
由美国 Prolog 开发中心(Prolog Development Center, PDC)1986 年开发成功、
Borland 公司对外发行,其 1.0,2.0,2.1 版本取名为 Turbo Prolog,主要在
IBM PC 系列计算机,MS-DOS 环境下运行。
2222、、、、PDCPDCPDCPDC Prolog
Prolog
Prolog
Prolog
1990 年后,PDC 推出新的版本,更名为 PDC Prolog 3.0,3.2,它把运行环境扩
展到 OS/2 操作系统,并且向全世界发行。它的主要特点是:
• 速度快。编译及运行速度都很快,产生的代码非常紧凑。
4
• 用户界面友好。提供了图形化的集成开发环境。
• 提供了强有力的外部数据库系统。
• 提供了一个用 PDC Prolog 编写的 Prolog 解释起源代码。用户可以用它研究 Prolog
的内部机制,并创建自己的专用编程语言、推理机、专家系统外壳或程序接口。
• 提供了与其他语言(如 C、Pascal、Fortran 等)的接口。Prolog 和其他语言可以相互
调用对方的子程序。
• 具有强大的图形功能。支持 Turbo C、Turbo Pascal 同样的功能。
Visual
3333、、、、Visual
Prolog
Visual
Prolog
Visual Prolog
Prolog
Visual Prolog 是基于 Prolog 语言的可视化集成开发环境,是 PDC 推出的基于
Windows 环境的智能化编程工具。目前,Visual Prolog 在美国、西欧、日本、
加拿大、澳大利亚等国家和地区十分流行,是国际上研究和开发智能化应用的主
流工具之一。
Visual Prolog 具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等
强大功能。它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、
连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、
字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。
Visual Prolog 包含一个全部使用 Visual Prolog 语言写成的有效的开发环境,
包含对话框、菜单、工具栏等编辑功能。
Visual Prolog 与 SQL 数据库系统、C++开发系统、以及 Visual Basic、Delphi
或 Visual Age 等编程语言一样,也可以用来轻松地开发各种应用。
Visual Prolog 软件的下载地址为:http://www.visual-prolog.com 。
5