SWI-PROLOG第1章 事实

合集下载

学习使用Prolog进行逻辑编程和人工智能开发

学习使用Prolog进行逻辑编程和人工智能开发

学习使用Prolog进行逻辑编程和人工智能开发第一章:引言Prolog是一种逻辑编程语言,它以逻辑推理为基础,被广泛应用于人工智能领域。

通过学习和使用Prolog,我们可以深入了解逻辑编程的基本原理,并能够开发出具有人工智能功能的应用程序。

本章将介绍Prolog的基本概念和优势。

第二章:Prolog的基本概念Prolog是逻辑编程的一种实现,它将求解问题转化为对规则和事实的推理和查询。

在Prolog中,我们通过定义事实和规则来描述问题领域,并通过查询来求解问题。

事实是对问题领域中的真实陈述的描述,而规则则是对问题领域中的逻辑关系的描述。

第三章:Prolog的语法和规则Prolog具有简洁的语法和强大的规则推理机制。

在Prolog中,我们可以使用一些特定的语法元素来描述事实和规则。

例如,我们可以使用“:-”符号表示逻辑推理,使用“,”符号表示逻辑与,使用“;”符号表示逻辑或等。

第四章:Prolog的查询和求解通过在Prolog中提出查询,我们可以利用事实和规则来求解问题。

Prolog采用自顶向下的求解方式,即从最一般的规则开始,逐步推导出具体的解答。

Prolog的查询机制可以帮助我们在大量的事实和规则中找到特定的解答。

第五章:Prolog的人工智能应用由于Prolog具有逻辑推理的能力,它在人工智能的应用中有着广泛的应用。

例如,在专家系统中,我们可以利用Prolog来描述专家的知识和推理规则;在自然语言处理中,我们可以利用Prolog来处理自然语言的语义等。

Prolog在人工智能领域的应用为我们提供了一种强大而灵活的工具。

第六章:Prolog和其他编程语言的结合尽管Prolog具有自己独特的特点和优势,但在一些情况下,我们可能需要将Prolog与其他编程语言相结合来完成复杂的任务。

例如,我们可以通过使用Java或Python等编程语言来实现Prolog 所不能轻易处理的部分。

Prolog与其他编程语言的结合使得我们能够更加灵活地开发和应用人工智能系统。

Prolog语言(耐心看完-你就入门了)剖析

Prolog语言(耐心看完-你就入门了)剖析
变量:用于表示暂时不能命名或者不需要命
名的对象,用大写字母开头
2024/7/16
特殊变量:空变量,记作:“_” 含义:我们对问题的某一个变量的值不关心
2024/7/16
<项>::= <常量> | <变量> | <复合项>
<复合项> ::=
<原子>(<项> { , <项> })|
<项> <原子> <项> { <原子> <项> }
也是Horn子句,并受全称量词约束
2024/7/16
③(问题)是 Q1∧…∧Qm
受存在量词约束,取非后 ~Q1∨…∨~Qm
受全称量词约束,是Horn子句
2024/7/16
Prolog三种形式的语言都是Horn子句 问题求解就是Horn子句集消解
2024/7/16
3 表结构
表:若干个元素的有序序列
2024/7/16
项的定义: <项>::= <常量> | <变量> | <复合项>
2024/7/16
<项>::= <常量> | <变量> | <复合项>
<常量>::=<原子> | <数> <原子> ::=
<标识符原子> | <字符串原子> | <特殊原子>
2024/7/16
标识符原子 命名:用小写字母或者小写字母开头的小写字母
不能被重新满不必要的回溯,提高程序运行效率
2024/7/16

PROLOG语言入门

PROLOG语言入门

PROLOG语言入门简介PROLOG语言是一个非常有趣的计算机语言。

它完全不同于我们已经很熟悉的其它计算机语言、例如BASIC、FORTRAN、C等。

主要由于现在的计算机硬件能力的限制,使得PROLOG语言没有得到更广泛的流行。

但是未来随着计算机硬件技术的发展,PROLOG语言将会发挥更大的作用。

尤其是通过PROLOG语言的学习,我们对计算机语言的本质会有更多的了解。

虽然对许多人来说,PROLOG语言比较陌生。

但是PROLOG语言很容易入门,人们很容易感受到它的魅力。

本书在多年从事相关教学的讲义的基础上形成。

本书没有试图写成PROLOG语言程序设计的指导书,而是着重在于于介绍PROLOG的有趣性,引导读者尽快进入PROLOG世界。

同时,尽量利用BASIC、FORTRAN、C等大家熟悉的语言的例子,说明PROLOG与这些语言的区别,以加深读者对PROLOG的理解。

因此,本书适合于PROLOG的初学者,而对于那些已有相当基础、希望利用PROLOG开发应用程序的读者,则可以选择其它更加全面的书籍,例如本书末尾所推荐的那些书籍。

目录1引言2为什么有PROLOG3什么是PROLOG ?4最简单的PROLOG程序5PROKOG运行方式6关于Visual PROLOG ?7Visual PROLOG的运行方式8PROKOG入门9规则与事实10递归11表12引言首先,介绍一种常见的扑克牌游戏。

该游戏方法为:“随意抽出4张扑克牌。

然后利用加、减、乘、除方法,对这个4张扑克牌所代表的4个数进行四则运算。

要求最后的运算结果为24。

注意,每个数只能在运算中出现1次,且必须出现1次。

”例如,如果所抽取的4张牌所代表的4个数分别为:2,4,7,9。

则可以采用如下运算方法:2 * 4 + 9 + 7 = 24有时,同一数字组合,可能存在好几种四则运算方法。

游戏时,可以规定先找到相应的四则运算方法的人获胜。

有些数字组合比较容易计算,例如6,6,6,6。

Prolog语言及程序设计

Prolog语言及程序设计

Prolog语言及程序设计简介Prolog语言是一种基于逻辑编程的编程语言,它的特点是使用规则和事实来描述问题和解决方案,而不是通过指令的序列来控制程序的执行流程。

Prolog语言以一种声明式的方式描述问题,允许程序员通过定义规则和事实来描述问题的逻辑关系,然后通过查询来得到问题的解答。

Prolog语言在领域有广泛的应用,特别适合用于解决逻辑推理、知识表示和专家系统等问题。

Prolog基本语法Prolog语言的基本语法由规则和事实组成。

规则是由一个头部和一个体部组成的,头部描述了规则的,而体部描述了规则的前提条件。

事实是由一个或多个项组成的简单语句,描述了一些已知的逻辑关系。

下面是一个简单的Prolog规则和事实的例子:prologfather(peter, john).father(peter, mary).parent(X, Y) :father(X, Y).在上面的例子中,规则`parent(X, Y) :father(X, Y)`表示,如果一个人X是另一个人Y的父亲,X就是Y的父母。

事实`father(peter, john)`和`father(peter, mary)`表示,peter是john和mary的父亲。

Prolog查询在Prolog中,可以通过查询来获取问题的解答。

查询是以一个问题的形式提出的,Prolog会根据已知的规则和事实来寻找满足问题的解答。

下面是一个简单的Prolog查询的例子:prologparent(peter, john).在上面的例子中,查询`parent(peter, john)`表示,找出一个人X,使得peter是X的父母,而john是X的子女。

Prolog会在已知的规则和事实中寻找满足这个条件的解答。

Prolog程序设计Prolog程序设计是通过定义规则和事实来解决问题的过程。

可以使用Prolog语言来实现各种不同的算法和逻辑推理。

下面是一个简单的Prolog程序设计的例子:prologfactorial(0, 1).factorial(N, Result) :-N > 0,N1 is N 1,factorial(N1, Result1),Result is N Result1.在上面的例子中,定义了一个计算阶乘的规则`factorial(N, Result)`,如果N是0,则结果是1;否则,结果是N乘以(N-1)的阶乘。

Prolog for Windows Manual

Prolog for Windows Manual

Prolog for WindowsManual for MA410 labsAlla DetinkoThis manual should get you started using SWI-Prolog under MS-Windows.1. Starting Prolog.1.1. Implementations.Prolog implementations are freely available from Prolog websites or http://gnu-prolog.inria.fr(both under Windows and Linux).These websites provide also links to manuals, books, online tutorials, and other related Prolog materials.1.2. Starting Prolog and loading a program.The SWI-Prolog implementation under Windows is available in NUIG PC suites. You can start it by clicking the Prolog icon. As a result, a SWI-Prolog console will open (see Figure 1).File Edit Settings Run Debug Help Welcome to SWI-Prolog (Multi-threaded, Version 5.4.7)Copyright (c) 1990-2002 University of Amsterdam.SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to redistribute it under certain conditions.Please visit for details.For help, use ?- help(Topic). or ?- apropos(Word).-Figure 1.Alternatively, you can start Prolog by the SWI-Prolog executable plwin.exe (default folder C:\Program Files\pl\bin) or by opening a .pl file holding Prolog program text. For example, you can practice using the file likes.pl available in C:\Program Files\pl\demo. Another way to open likes.pl is demonstrated in Figure 2.- [swi('demo/likes')].% swi('demo/likes') compiled 0.06 sec, 2,420 bytesYes-Figure 22. Using Prolog.2.1. Menu commands.The SWI-Prolog console has a menu for accessing the most commonly used commands (see the first line in Figure 1). In particular, if you click on the button File of the menu you will see the following entries:Consult, Edit, New, Reload modified files, Navigator, Exit.We will consider the first three commands in the next section. The command Reload modified files is to reload all loaded source-files that have been modified using the make command (section 2.2). The command Navigator opens an explorer-like view on Prolog files and the predicates they contain: to view the predicates in a file you should find the file by Navigator and then click on the file name. Also Navigator provides an option to edit the selected file.The menu button Settings allows you to change the font of the console as well as providing some additional options.The button Run provides two options: Interrupt and New thread. Interrupt is to interrupt the running Prolog process. New thread creates a new window running in a separate thread of execution.The button Help provides access to the online Prolog manual. In particular, it contains links to pages of the SWI-Prolog website.2.2. Some useful commands.This section contains a brief overview of important Prolog commands.consult(+File)Load a source-file from the current folder. The file-extension pl can be omitted (see Figure 3)- consult(family).% family compiled 0.00 sec, 8,016 bytesYes- consult(likes).ERROR: source_sink `likes' does not exist- ['C:/Program Files/pl/demo/likes'].% C:/Program Files/pl/demo/likes compiled 0.00 sec, 2,300 bytesYesFigure 3The first line in Figure 3 gives an example of a successful execution of the command consult: family.pl has been loaded from the current folder. The file likes.pl is not in the current folder, therefore to load it we should use absolute path (see the sixth line in Figure 3). Alternatively, you can use the command consult from the menu (see section 2.1).pwdPrint working directory in the console.edit (+File)Edit file with the given name. Also available from the menu (see section 2.1). If Prolog is started by opening a .pl file then the file name in the command edit can be omitted.In Prolog you can use various editors, in particular, the editor PceEmacs. To start it, type the command emacs.makeReload all files that have been changed since they were last loaded. This command is normally used after editing one or more files.help(+Spec)Gives help on Spec. For example, help(make) gives help on the command make, and help(2) (respectively, help (2-1)) gives access to Chapter 2 of the manual (respectively to Section 1 of Chapter 2). Alternatively, you can use access to the manual via the menu. apropos (+Keyword)Search for all predicates that contain Keyword in their name or short description in the manual.Control-CTry to interrupt the running Prolog process (see also Run in the menu). After execution, you will see the following line in the console:Action (h for help) ?If you really want to exit Prolog, type e. Else you can choose one of the following options.a: abort b: breakc: continue e: exitg: goals t: traceh (?): help3. Example.Figure 4 shows the family tree of Smith’s family.Figure 4To write a program which defines a family relation click the button File of the menu and choose the option New. Let us call the new file smith.pl. Type the text in the file and save it (see Figure 5).________________________________________________________________________ parent(john, ann). /*the fact that John is a parent of Ann*/parent(john, mike). %the fact that John is a parent of Mikeparent(mary, mike).parent(mike, pat).parent(mike, bob).parent(pat, ben).________________________________________________________________________Figure 5Here parent is the name of a family relation.Note that the text in /* */ is a comment as well as the text between the percent character % and the end of the line (see the first and, respectively, the second lines in Figure 5). Consult the file (see section 2.2); for example, use the command- consult(smith).Now we can pose Prolog questions about the relation parent (see Figure 6).- parent(john, mike). /* Is John a parent of Mike */Yes- parent(mike, ann). /* Is Mike a parent of Ann */No- parent(mike, X). / *Who is a child of Mike */X = patYes- parent(mike, _). /* Is Mike a parent */YesFigure 6If we want to get a list of all pairs parent-child, type parent(X, Y), and then press repeatedly semicolon (;) (see Figure 7). To abort the process, press return.- parent(X, Y).X = johnY = ann ;X = johnY = mike ;X = maryY = mike ;X = mikeY = pat ;X = mikeY = bob ;X = patY = ben ;No /*indicates that the list is full*/Figure 7To extend the program by adding new facts or rules, edit the file smith.pl. You can use, for example, option File/Edit of the menu, which will open the file smith.pl for editing. For example, let us add information on the gender and define predicates mother,father (see Figure 8).________________________________________________________________________ parent(john, ann). %the fact that John is a parent of Ann parent(john, mike). %the fact that John is a parent of Mike parent(mary, mike).parent(mike, pat).parent(mike, bob).parent(pat, ben).female(mary). %the fact that Mary is a female female(ann).female(pat).male(john). %the fact that John is a malemale(mike).male(bob).male(ben).mother(X,Y) :- parent(X, Y), female(X). %definition of the predicate mother father(X,Y) :- parent(X, Y), male(X). %definition of the predicate fatherFigure 8Consult the file smith.pl. Now you can ask new questions. For example, try the following:- female(X).- mother(X, mike).- mother(pat, Y).- father(X, Y).。

prolog 语法

prolog 语法

prolog 语法Prolog是一种逻辑编程语言,它的语法结构由谓词和规则组成。

以下是Prolog的基本语法规则:1. 事实(Facts):事实是描述真实情况的陈述,使用谓词表示。

例如:father(jack, john)表示"jack是john的父亲"。

2. 规则(Rules):规则定义了与事实之间的逻辑关系。

规则由头部和身体组成,使用":-"连接。

头部是一个谓词,身体是一个由逗号分隔的谓词列表。

例如:man(X) :- father(X, _), male(X)表示"如果X是某人的父亲且X是男性,则X是男人"。

3. 查询(Queries):查询用于检查一个特定条件是否成立。

查询以问号开头,使用谓词表示。

例如:?- man(X)表示"是否存在一个人X是男人"。

4. 变量(Variables):变量用大写字母或下划线开头。

变量在查询时用于接收结果。

例如:?- father(jack, X)表示"是否存在一个人X是jack的父亲"。

5. 列表(Lists):列表由方括号包围,其中的项由逗号分隔。

列表可以包含任何类型的元素,甚至包含其他列表。

例如:[1, 2, 3]表示一个包含数字1、2和3的列表。

6. 运算符:Prolog中的运算符被分为多个优先级和结合性。

常用的运算符包括算术运算符(+, -, *, /),比较运算符(<, >,=<, >=, =:=, \=)和逻辑运算符(,;,!,\+)。

7. 注释(Comments):Prolog中的注释以%开头,直到行末。

这些是Prolog语法的基本规则,但还有许多其他的语法特性和约定可用于更复杂的程序。

AI01-Prolog

AI01-Prolog

?- k(Y).
?- k(Y).
The Principles of AI-----Wang Wenjie
Resolution: 16
Graduate School , Chinese academy of Sciences.
Example: search tree
f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X).
?- k(Y).
The Principles of AI-----Wang Wenjie
Resolution: 15
Graduate School , Chinese academy of Sciences.
Example: search tree
f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X).
Prolog表示为: 表示为: 表示为 likes(bill, cindy). likes(cindy, bill). likes(bill, dogs).
The Principles of AI-----Wang Wenjie
Resolution: 8
Graduate School , Chinese academy of Sciences.
Resolution: 1
Graduate School , Chinese academy of Sciences.
智能程序设计语言 prolog
The Principles of AI-----Wang Wenjie
Resolution: 2
Graduate School , Chinese academy of Sciences.

人工智能导论_实验指导

人工智能导论_实验指导

《人工智能导论》实验指导实验一Prolog平台使用实验二状态空间搜索:传教士与野人问题求解实验三启发式搜索算法:斑马属谁问题求解实验四小型专家系统设计与实现实验报告的基本内容和书写格式——————————————————————————————————一、实验目的二、实验内容三、实验步骤四、实验结果1. 系统名称〈所做系统的名称〉2. 系统概述(包括所做系统的背景和主要功能等。

)3.系统运行演示过程(1) 输入的初始事实或数据:(2) 系统运行时产生的推理树(网):(3) 输出的结果:——————————————————————————————————《人工智能导论》实验一Prolog平台使用实验目的:熟悉Prolog(包括SWI-Prolog平台、Turbo-Prolog平台),包括编辑器、编译器及其执行模式;熟悉Prolog语法、数据结构和推理机制;熟悉SWI-Prolog平台与Visual C++结合开发应用程序。

实验环境(硬/软件要求):硬件:计算机一台软件:SWI-Prolog、Turbo Prolog、SWI-Prolog-Editor、Visual C++、Eclipse实验内容:1.Prolog平台界面和基本操作;2.熟悉Prolog语法和数据结构;3.熟悉Eclipse PDT插件安装、使用;4.编写简单Prolog程序并测试(输入动物叫声、输出该动物名称);5.熟悉Prolog平台与Visual C++结合开发应用程序;实验主要步骤:1.打开SWI-Prolog平台,熟悉SWIPrologEditor,熟悉操作界面;2.实现Prolog基本语句;3.编写简单Prolog程序并测试(输入动物叫声、输出该动物名称);示例程序(Turbo Prolog)逻辑电路模拟程序。

该程序以逻辑运算“与”、“或”、“非”的定义为基本事实,然后在此基础上定义了“异或”运算。

那么,利用这些运算就可以对“与”、“或”、“非”和“异或”等逻辑电路进行模拟。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章事实、规则和查询这一章有两个主要目标:给一些简单的Prolog程序的例子。

这将会给我们介绍Prolog的三种基本结构:事实、规则和查询。

它也会给我们介绍其他一些主题,像逻辑Prolog的角色,执行统一的概念借助变量。

开始Prolog通过定义条件的系统研究,原子变量和其他语法概念。

1.1 一些简单的例子知识基础1知识基础2知识库3知识库4知识基础51.2 Prolog语法原子数字变量复杂的条款1.3 练习1.4 实际的会话1.1一些简单的例子只有Prolog中的三种基本结构:事实、规则和查询。

事实和规则的集合称为知识库(或数据库)和Prolog 编程都是关于写作知识基础。

也就是说,Prolog程序简单是知识库,事实和规则的集合描述关系的集合,我们发现一些有趣的。

那么,我们如何使用Prolog程序?通过提出查询。

也就是说,通过询问信息存储在知识库中。

这可能听起来很奇怪。

这当然不明显,与编程。

毕竟,不是编程告诉计算机做什么吗?但我们应当看到,Prolog的编程方式是非常合理的,至少对于某些任务;例如,它是有用的在计算语言学和人工智能(AI)。

而是说更多关于Prolog概括地说,让我们直接开始编写一些简单的知识基础;这不仅仅是学习Prolog的最佳方式,这是唯一的方法。

知识基础1知识库1(KB1)是一个简单事实的集合。

事实是用于国家的事情无条件地真正感兴趣的一些情况。

例如,我们可以,Mia, Jody, Yolanda是woman, Jody扮演空气吉他,一方发生,使用以下五个事实:woman(mia).woman(jody).woman(yolanda).playsAirGuitar(jody).party.这个事实是KB1的集合。

这是我们的第一个例子的Prolog程序。

注意,名字mia,jody,yolanda,属woman和 playsAirGuitar,命题方一直在写,第一个字母小写。

这是很重要的;稍后我们将看到为什么。

我们如何使用KB1吗?通过提出查询。

也就是说,通过询问KB1包含的信息。

这里有一些例子。

我们可以问Prolog米娅是一个女人是否构成查询:- woman(mia).Prolog将回答yes很明显的原因就是这是一个事实在KB1明确记录。

顺便说一下, 我们不输入 ?。

这个符号(或类似的,这取决于Prolog您正在使用)的实现是Prolog解释器的提示符号显示等待评估时查询。

我们只要输入实际的查询(例如woman (mia))紧随其后 .(句号)。

句号是很重要的。

如果你不输入,查询Prolog不会开始工作。

同样,我们可以问是否杨晨扮演空气吉他带来以下查询:- playsAirGuitar(jody).Prolog将再次回答是的,因为这是一个KB1的事实。

然而,假设我们问米娅扮演空气吉他:- playsAirGuitar(mia).我们将得到答案no为什么?嗯,首先,这不是一个在KB1事实。

此外,KB1极其简单,不包含其他信息(如规则不久我们将了解),可能有助于Prolog试图推断(演绎)是否Mia空气吉他。

所以Prolog正确的结论 playsAirGuitar(mia)做不从KB1跟��。

这里有两个重要的例子。

首先,假设我们的查询:- playsAirGuitar(vincent).再次Prolog回答没有。

为什么?嗯,这个查询的方法是对一个人(Vincent),它没有信息,所以它(正确地)认为 playsAirGuitar(vincent)在KB1不能推导出的信息。

同样的,假设我们的查询:- tatooed(jody).再次Prolog不会回答。

为什么?嗯,这个查询是一个属性(日吨产量),它没有信息,所以再次查询(正确地)得出结论,不能推导出KB1中的信息。

(事实上,一些Prolog实现将如何应对这个查询错误消息,告诉你,谓词或过程日吨产量没有定义;我们将很快介绍谓词的概念。

)不用说,我们也可以查询有关命题。

例如,如果我们提出查询- party.然后Prolog的反应yes如果我们的查询- rockConcert.然后Prolog的反应no正如我们所期望的。

知识基础2这是我们第二个知识库:KB2,happy(yolanda).listens2Music(mia).listens2Music(yolanda):- happy(yolanda).playsAirGuitar(mia):- listens2Music(mia).playsAirGuitar(yolanda):- listens2Music(yolanda).有两个事实KB2, listens2Music(mia)和happy(yolanda)。

最后它包含三项规则。

规则状态信息有条件地真正的感兴趣的情况。

例如,第一条规则说Yolanda听音乐如果她是幸福的,,最后一个规则说, Yolanda空气吉他如果她听音乐。

更一般的, :-应该被���读为“如果”,或者“隐含了”。

的左手边 :-被称为规则的头,右手边的部分称为身体。

所以在一般规则说: 如果规则的身体是真的, 然后的规则是正确的。

现在的关键点:如果一个知识库包含一个规则头 :- 的身体, 和Prolog知道那身体遵循从知识库中的信息 Prolog可以推断出头。

这个基本推理步骤叫做演绎推理。

让我们考虑一个例子。

假设我们问米娅扮演空气吉他:- playsAirGuitar(mia).Prolog会是的。

为什么?虽然找不到 playsAirGuitar(mia)事实明确记录在KB2,它可以找到规律playsAirGuitar(mia):- listens2Music(mia).此外,KB2还包含事实 listens2Music(mia)。

因此Prolog可以使用规则的演绎推理推断出 playsAirGuitar(mia) .我们的下一个例子展示了演绎推理的Prolog可以连锁在一起使用。

假设我们问:- playsAirGuitar(yolanda).Prolog会是的。

为什么?首先,通过使用这个事实快乐(紫罗兰)和法治listens2Music(yolanda):- happy(yolanda).Prolog可以推导出新的事实 listens2Music(yolanda)。

这个新的事实是没有明确记载的知识库——只有隐式地礼物( 推断出知识)。

尽管如此,Prolog可以使用它就像一个明确记录的事实。

特别是,这个推断的事实和规则playsAirGuitar(yolanda):- listens2Music(yolanda).它可以推断出 playsAirGuitar(yolanda),这就是我们问。

总结:任何由应用程序产生的演绎推理可以作为进一步的输入规则。

通过以这种方式连接在一起,演绎推理的应用,Prolog能够检索信息,逻辑上遵循的规则和事实记录到知识库中。

知识库中包含的事实和规则被称为条款。

因此KB2包含五个条款,即三个规则和两个事实。

看着KB2的另一种方法是说,它由三个谓词(或过程)。

这三个谓词是:listens2MusichappyplaysAirGuitar的快乐谓词定义使用单一条款(事实)。

的 listens2Music和 playsAirGuitar谓词的定义都使用两个条款(在一个案例中,两个规则,在其他情况下,一个规则,一个事实)。

这是一个好主意去思考它们包含谓词的Prolog程序。

从本质上讲,谓词是我们发现重要的概念,和各种条款我们写下关于他们是我们试图确定他们的意思,它们是如何相互关联的。

最后一个评论。

我们可以把一个事实通常空着的身体。

我们能想到的事实没有任何前提条件的条件,或退化的规则。

知识库3KB3,第三知识库,包括五个条款:happy(vincent).listens2Music(butch).playsAirGuitar(vincent):-listens2Music(vincent),happy(vincent).playsAirGuitar(butch):-happy(butch).playsAirGuitar(butch):-listens2Music(butch).有两个事实, ,happy(vincent)和listens2Music(butch和三个规则。

KB3定义KB2(即相同的三个谓词happy , listens2Music, playsAirGuitar),但这将它们定义不同。

特别是,定义的三个规则 playsAirGuitar谓词引入一些新的想法。

首先,注意规则playsAirGuitar(vincent):-listens2Music(vincent),happy(vincent).有两个物品在它的身体,或两个目标(使用标准术语)。

那么,这条规则到底意味着什么?最重要的是要注意的是逗号 ,把目标 listens2Music(vincent)和我们的目标happy( (vincent)在规则的身体。

这是逻辑连接的方式表达在序言(也就是说,逗号的意思和)。

这条规则说:“vincent空气吉他如果他听音乐和他很高兴”。

因此,如果我们提出查询- playsAirGuitar(vincent).Prolog不会回答。

这是因为而KB3包含快乐(vincent),它不显式地包含的信息 listens2Music(vincent),这个事实不能推导出。

所以KB3只满足两个前提条件中的一个需要建立 playsAirGuitar(vincent),我们查询失败。

顺便说一下,这个规则中使用的间隔是无关紧要的。

例如,我们可以写它playsAirGuitar(vincent):- happy(vincent),listens2Music(vincent).这意味着同样的事情。

Prolog提供我们很多自由的方式我们知识基础出发,我们可以利用这个让我们的代码的可读性。

接下来,注意KB3包含两个规则完全相同的,即:playsAirGuitar(butch):-happy(butch).playsAirGuitar(butch):-listens2Music(butch).这是一种说明butch空气吉他要么如果他听音乐, 或如果他是快乐。

清单多个规则相同的头,是一种表达逻辑析取(也就是说,它是一种的说法或)。

如果我们提出查询- playsAirGuitar(butch).Prolog会回答是的。

尽管这些规则的第一个不会帮助(KB3不允许Prolog的结论happy (butch)),KB3 做包含 listens2Music(布奇)这意味着Prolog使用规则可以应用演绎推理playsAirGuitar(butch):-listens2Music(butch).得出结论, playsAirGuitar(布奇) .还有另一种方式表达在Prolog脱节。

相关文档
最新文档