Prolog概况及基本结构分析
Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。
尽管Prolog语言有许多版本,但它们的核心部分都是一样的。Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序逻辑性强,文法简捷,清晰易懂。另一方面,Prolog是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。
1、事实
事实用来说明一个问题中已知的对象和它们之间的关系。在Prolog程序中,事实由谓词名及用括号括起来的一个或几个对象组成。谓词和对象可由用户自己定义。
例如,谓词likes(bill,book)。
是一个名为like的关系,表示对象bill和book之间有喜欢的关系。
2、规则
规则由几个互相有依赖性的简单句(谓词)组成,用来描述事实之间的依赖关系。从形式上看,规则由左边表示结论的后件谓词和右边表示条件的前提谓词组成。
例如,规则 bird(X):-animal(X),has(X,feather)。
表示凡是动物并且有羽毛,那么它就是鸟。
3、目标(问题)
把事实和规则写进Prolog程序中后,就可以向Prolog询问有关问题的答案,询问的问题就是程序运行的目标。目标的结构与事实或规则相同,可以是一个简单的谓词,也可以是多个谓词的组合。目标分内、外两种,内部目标写在程序中,外部目标在程序运行时由用户手工键入。
例如问题 ?-student(john)。
表示“john是学生吗?”
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),移动时有以下限制:每次只能移动一个盘子;大盘不能放在小盘上。问如何移动?
该问题可以采用递归法思想来求解,其源程序为:
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作为数据或者逻辑处理程序而运行,配合其它程序如VC++、JAVA等的界面,由此实现带UI交互的“智能”软件,当然你所编辑出来的“智能”是软件,而不能说是真正意义的人工智能。上文说Prolog就是一个智能数据库,其实不然,Prolog主要是对数据进行一种关系描述,比如张三和李四是A关系,李四和王二是B关系,A关系==B关系,那么Prolog则擅长处理这种逻辑上的数据关系,不能和SQL混为一谈,所以说,Prolog的用途是来处理数据之间关系的,而不是存储数据本质的存在。
Prolog语言的常用版本
Prolog语言最早是由法国马赛大学的Colmerauer和他的研究小组于1972年研制成功。早期的Prolog版本都是解释型的,自1986年美国Borland公司推出编译型Prolog,即Turbo Prolog以后,Prolog便很快在PC机上流行起来。后来又经历了PDC PROLOG、Visual Prolog不同版本的发展。并行的逻辑语言也于80年代初开始研制,其中比较著名的有PARLOG、Concurrent PROLOG等。
1、Turbo Prolog
由美国Prolog开发中心(Prolog Development Center, PDC)1986年开发成功、Borland公司对外发行,其1.0,2.0,2.1版本取名为Turbo Prolog,主要在IBM PC系列计算机,MS-DOS环境下运行。
2、PDC Prolog
1990年后,PDC推出新的版本,更名为PDC Prolog 3.0,3.2,它把运行环境扩展到OS/2操作系统,并且向全世界发行。它的主要特点是:
•速度快。编译及运行速度都很快,产生的代码非常紧凑。
•用户界面友好。提供了图形化的集成开发环境。
•提供了强有力的外部数据库系统。
•提供了一个用PDC Prolog编写的Prolog解释起源代码。用户可以用它研究Prolog的内部机制,并创建自己的专用编程语言、推理机、专家系统外壳或程序接口。
•提供了与其他语言(如C、Pascal、Fortran等)的接口。Prolog和其他语言可以相互调用对方的子程序。
•具有强大的图形功能。支持Turbo C、Turbo Pascal同样的功能。
3、Visual 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
Prolog语言特点
1. prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人。从这个意义上来说,prolog程序不是真正意义上的程序。所谓程序就是按照一定的步骤运行的计算机指令,而prolog程序的运行步骤不由人来决定。它更像一种描述型的语言,用特定的方法描述一个问题,然后由电脑自动找到这个问题的答案。举个极端的例子,你只需要把某个数学题目告诉它,它就会自动的找到答案,而不像使用其他的语言一样,必须人工的编制出某种算法。
2. prolog程序中没有if、when、case、for这样的控制流程语句前面已经说了,程序的运行方式有电脑自己决定,当然就用不到这些控制流程的语句了。通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面,不过prolog也提供了一些控制流程的方法,这些方法和其他语言中的方法有很大的区别,希望你在以后的学习当中能够融会贯通。
3. prolog程序和数据高度统一在prolog程序中,是很难分清楚哪些是程序,哪些是数据的。事实上,prolog中的所有东西都有相同的形式,也就是说数据就是程序,程序就是数据。举一个其他语言的例子:如果想用c语言编写一个计算某个数学表达式的程序很简单(比如:a=2+5*4),因为这是一段程序。但是如果想编写一个计算用户输入的表达式的值的程序就很困难了。因为用户输入的是一段数据(字符串),如果想让c语言处理这个字符串,就需要很多方面的技术。则正是因为在c语言中,程序和数据是分开的。而在prolog就不存在这个问题,你甚至可以很轻松的编写处理其它prolog程序的程序。
4. prolog程序实际上是一个智能数据库prolog的原理就是关系数据库,它是建立在关系数据库的基础上的。在以后的学习中你会发现它和SQL数据库查询语言有很多相似之处。使用prolog可以很方便的处理数据。5. 强大的递归功能在其它的语言中,你也许已经接触过递归程序了。递归是一种非常简洁的方式,它能够有效的解决许多难题。而在prolog中,递归的功能得到了充分的体现,你甚至都会感到惊奇,递归居然有如此巨大的能力。
评论
查看更多