人工智能
文章平均质量分 78
mwsong
这个作者很懒,什么都没留下…
展开
-
Prolog教程 3
事实 (facts) 注:斜粗体字表示Prolog的专有名词事实(facts)是prolog中最简单的谓词(predicate)。它和关系数据库中的记录十分相似。在下一章中我们会把事实作为数据库来搜索。谓词: Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。 事实的语法结构如下:pred(arg1转载 2007-08-30 20:00:00 · 5976 阅读 · 3 评论 -
Prolog教程 13
我们已经学习过了Prolog的数据结构,它的形式如下:functor(arg1,arg2,...,argN).这是Prolog的唯一的数据结构,但是Prolog允许这种数据结构有其它的表达方法(仅仅是表达方法不同)。这种表达方法有时候更加接近我们的习惯,正如列表的两种表达法一样。现在要介绍的是操作符语法。以前曾经介绍了数学符号,在这一章我们将看到它和Prolog的数据结构是等价的,并且学习如何定义转载 2007-08-31 09:40:00 · 2272 阅读 · 0 评论 -
Prolog教程 10
到目前为止,所介绍的事实、查询以及规则都使用的是最简单的数据结构。谓词的参数都是原子或者整数,这些都是Prolog的基本组成元素。例如我们所使用过的原子有:office, apple flashlight, nani通过把这些最简单的数据组合起来,可以生成复杂的数据类型,我们称之为结构。结构由结构名和一定数量的参数组成。这与以前所学过的目标和事实是一样的。functor(arg1,arg2,...转载 2007-08-31 09:36:00 · 2458 阅读 · 0 评论 -
Prolog教程 5
我们可以把简单的查询连接起来,组成一些较复杂的查询。例如,如果我们想知道厨房里能吃的东西,就可以向Prolog进行如下的询问。?- location(X, kitchen), edible(X). 简单的查询只有一个目标,而混合查询可以把这些目标连接起来,从而进行较为复杂的查询。上面的连接符号,转载 2007-08-31 09:25:00 · 4336 阅读 · 0 评论 -
Prolog教程 1
如果你是一位prolog的新手,希望你首先阅读这篇文章,好对prolog的全局有个了解。在这篇文章中我会把prolog和其他的程序语言做比较,所以希望你已经具有了一定的编程水平。什么是prolog?prolog是Programming in LOGic的缩写,意思就是使用逻辑的语言编写程序。prolog不是很高深的语言,相反,比较起其他的一些程序语言,例如c、basic等等语言, prol转载 2007-08-30 19:55:00 · 24720 阅读 · 1 评论 -
Aleph输入文件
Aleph是Inductive logic programming的一个工具。Aleph输入文件包括三个,分别为:事实文件(input.b),正例文件(input.f),反例文件(input.n)。三个文件的文件名字部分相同,但具有不同的扩展名。调用时,使用命令:read_all(input)。事实文件事实文件是一个形如*.b的文件,包含以Prolog子句形式进行编码的相关领域信息,也可以原创 2007-08-30 19:24:00 · 1233 阅读 · 0 评论 -
Prolog教程 8
Prolog中也有一些能够进行数学计算的功能,但是数学计算是不好用逻辑的事物来描述的。因此计算一个数学表达式的方法和我们以前所学习的模式匹配有很大的区别。因此,Prolog专门提供了内部谓词is来计算数学表达式。其语法形式如下:X is 变量X将被赋值为表达式的值,在回溯时不赋值。数学表达式的形式和其他的语言相同。下面是使用Prolog计算的一些例子。?- X is 2 + 2. X = 4 ?-转载 2007-08-31 09:32:00 · 3610 阅读 · 0 评论 -
Prolog教程 7
到现在为止,我们已经对Prolog有了一个基本的了解,现在有必要对我们所学过的知识做一个系统的总结。 Prolog的程序是由一系列的事实和规则组成的数据库。 规则之间的调用是通过联合操作完成的,Prolog能够自动的完成模式匹配。 规则还可以调用内部谓词,例如转载 2007-08-31 09:31:00 · 4354 阅读 · 2 评论 -
Prolog教程 2
探索PrologProlog在英语中的意思就是Programming in LOGic(逻辑编程)。它是建立在逻辑学的理论基础之上的, 最初是运用于自然语言的研究领域。然而现在它被广泛的应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识库等。同时它对一些通常的应用程序的编写也很有帮助。使用它能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。从转载 2007-08-30 19:58:00 · 7389 阅读 · 2 评论 -
Prolog教程 16
Prolog特别适合开发自然语言的应用系统。在这一章,我们将为寻找Nani游戏添加自然语言理解的部分。(由于Prolog谓词是使用的英文符号,所以这里的自然语言理解只能局限在英文中)在着手于编制寻找Nani之前, 我们先来开发一个能够分析简单英语句子的模块。把这种方法掌握之后,编制寻找Nani的自转载 2007-08-31 09:45:00 · 3111 阅读 · 0 评论 -
Prolog教程 14
直到目前为止,我们都一直在使用Prolog内建的回溯功能。使用此功能可以方便地写出结构紧凑的谓词来。但是,并不是所有的回溯都是必须的,这时我们需要能够人工地控制回溯过程。Prolog提供了完成此功能的谓词,他叫做cut,使用符号!来表示。Cut能够有效地剔除一些多余的搜索。如果在cut处产生回溯,转载 2007-08-31 09:42:00 · 2406 阅读 · 1 评论 -
Prolog教程 12
为了能够更好地表达一组数据,Prolog引入了列表(List)这种数据结构。 列表是一组项目的集合,此项目可以是Prolog的任何数据类型,包括结构和列表。列表的元素由方括号括起来,项目中间使用逗号分割。例如下面的列表列出了厨房中的物品。[apple, broccoli, refrigerator] 我们可以使用列表来代替以前的多个子句。例如:loc_list([apple, broccoli,转载 2007-08-31 09:39:00 · 3567 阅读 · 0 评论 -
Prolog教程 11
Prolog的最强大的功能之一就是它内建了模式匹配的算法----联合(Unification)。以前我们所介绍的例子中的联合都是较为简单的。现在来仔细研究一下联合。下表中列出了联合操作的简要情况。变量&任何项目: 变量可以与任何项目绑定,其中也包括变量 原始项目&原始项目: 两个原始项目(原子或整数)只有当它们相同时才能联合。 结构&结构: 如果两个结构的每个相应的参数能联合,那么这两个结构可以联转载 2007-08-31 09:38:00 · 2696 阅读 · 0 评论 -
Prolog教程 9
Prolog的程序就是谓词的数据库,我们通常把这些谓词的子句写入Prolog的程序中的。在运行Prolog时,解释器首先把所有的子句调入到内存中。所以这些写在程序中的子句都是固定不变的。那么有没有办法动态地控制内存中的子句呢?Prolog提供了这方面的功能。这就意味着,Prolog程序在运行过程中,还能够改变它自己。它使用一些内部谓词来完成这个功能。最重要的几个谓词如下:asserta(X)把子句转载 2007-08-31 09:34:00 · 3541 阅读 · 3 评论 -
Prolog教程 6
前面我们已经说过,谓词是使用一系列的子句来定义的。以前我们所学习的子句是事实,现在让我们来看看规则吧。规则的实质就是储存起来的查询。它的语法如下:head :- body其中,head 是谓词的定义部分,与事实一样,也包括谓词名和谓词的参数说明。:- 连接符,一般可以读作‘如果’。body 一个或转载 2007-08-31 09:26:00 · 3273 阅读 · 4 评论 -
Prolog教程 4
现在我们的游戏中已经有了一些事实,使用Prolog的解释器调入此程序后,我们就可以对这些事实进行查询了。本章和下一章中的Prolog程序只包括事实,我们要学会如何对这些事实进行查询。Prolog的查询工作是靠模式匹配完成的。查询的模板叫做目标(goal)。如果有某个事实与目标匹配,那么查询就成功了转载 2007-08-31 09:24:00 · 4538 阅读 · 0 评论 -
Prolog教程 15
在前面的章节中,我们了解了Prolog是如何解释目标的,并且通过实例说明了Prolog的运行流程。在这一章,继续探索Prolog的程序流程控制,我们将介绍和一般的程序设计语言相似的流程控制。前面我们使用谓词fail和write/1来列印出游戏中所有的物品。这种流程控制类似于一般语言中“do,whi转载 2007-08-31 09:44:00 · 4316 阅读 · 0 评论