第0章:为什么要学习Prolog
背景:Prolog和LISP都是两个主要研究人工智能算法的工具。Prolog:用于欧洲; LISP:用于美国
Prolog的程式:基于谓语逻辑的理论。定立物件与物件的关系,用询问目标的方式查询物件间的关系。系统会自动匹配和回溯,找到询问的答案。
Prolog的模式匹配功能,使其适合快速开发一个语言的解析器。
第1章:配置开发环境
windows安装:安装Notepad++, 安装
SWI-Prolog的windows安装包,打开即可使用。
“?-”这样两个字符开头:对Prolog系统的查询,运用知识库判断查询 true or false.
"." :为结尾符号
输入输出, 参数的传递:实质上是执行语句的”副作用“(side effect).
例子:writeln('Hello world!').
第2章:谁是谁的爸爸
example 1:
male(di).
male(jianbo).
female(xin).
female(yuan).
female(yuqing).
father(jianbo,di).
father(di,yuqing).
mother(xin,di).
mother(yuan,yuqing).
grandfather(X,Y):-father(X,Z),father(Z,Y).
grandmother(X,Y):-mother(X,Z),father(Z,Y).
daughter(X,Y):-father(X,Y),female(Y).
每行都代表一个字句(clause)。 ”:-“ 表规则(rule),其余为事实(fact)。 小写字母开头名:原子(atom,常量); 大写字母开头名:变量。
”,“ 表逻辑关系'且'; ”;“表逻辑关系‘或’。
?- consult('路径/文件名.pl').
"consult":让SWI-Prolog加载编写的程序,然后编译。
或者直接在SWI-Prolog中:file - consult-选中文件-open
第3章:Prolog是如何回答问题的
example 2
parent(di,yuqing).
parent(keyuan,jianbo).
parent(jianbo,di).
ancestor(X,Y):-parent(X,Y).
ancestor(X,Y):-parent(X,Z),ancestor(Z,Y).
?- ancestor(keyuan,yuqing).
Prolog 从三方面证明给的查询( query)
匹配(unifing/matching)。
变量重命名(variable renaming)。
回溯(back-tracking)。-Prolog是用深度优先(depth-first search)的算法来寻找答案的。当一个规则或者是事实不符合时,Prolog会通过回溯的方式回到之前的状态,然后去尝试另外的规则或者是事实,知道你的查询(query)被证明为止。如果所有的可能性都搜索过了,你的查询仍然不能得到证实,那么Prolog会认为你的查询证实不了,返回”false”。