prolog简单教程

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

likes(tom,wine). likes(tom,book).
* 程序内goal则是找到一个解就停止搜索了 例:predicates likes(symbol,symbol) goal likes(tom,W),write(―tom likes ‖,W,‖\n‖). clauses likes(tom,food). likes(tom,wine). 程序内goal 运行结果 likes(tom,book). Dialog Tom tom likes food
3、影响回溯的手段——fail和cut
注意:Turbo Prolog ―外Goal‖ 和“程序内goal‖ 有“勤” “懒” 之分 * 对话框中输入的外Goal主动找出全部解并报告有几个 外Goal运行情况 Solutions Dialog 例:predicates Goal:likes(tom,What) likes(symbol,symbol) What=food What=wine clauses What=book likes(tom,food). 3 Solutions

表(List)
——

表由方括号与元素组成,元素又可是一个表。 非空表可用[x|y]表示,x—表头 y—表尾 • 例: [a,b,c] [a | [b,c]] 表头 a
表尾 [c]
[c]
[b | [c]]
[c | []]
表头 b 表尾 [c]
表头 c 表尾 []
空表无表头!
匹配与回溯
GOAL(目标)
predicates 运行 thief(symbol) Dialog likes(symbol,symbol) Goal : may_steal(john,What) may_steal(symbol,symbol) What=food clauses What=wine thief(john). 2 Solutions likes(tom,food). likes(john,wine). likes(john,X):- likes(tom,X). may_steal(X,Y):- thief(X),likes(X,Y).
PROLOG 语言
Prolog在英语中的意思就是Programming in LOGic(逻
辑编程)。 它是建立在逻辑学的理论基础之上的, 最初是运用于 自然语言的研究领域。然而现在它被广泛的应用在人 工智能的研究中,它可以用来建造专家系统、自然语
言理解、智能知识库等。
它对一些通常的应用程序的编写也很有帮助。使用它 能够比其他的语言更快速地开发程序,因为它的编程 方法更象是使用逻辑的语言来描述程序。
影响回溯的手段之二——cut
例2 : predicates sum_to(integer,integer) clauses sum_to(1,1):-! sum_to(N,Res):-N1=N-1, sum_to(N1,Res1),Res=Res+N. Dialog Goal:sum_to(3,X) X=6 如无cut,则stack overflow 1 Solutions
影响回溯的手段之二——cut
如不加cut ,则无休止地产生与测试,白费机 时,直到堆栈满 若在程序内加goal goal div(5,3,Z), write(―5/3=‖,Z,‖\n‖). 由于内goal的特性,子句中不必加cut,一旦 得到一个解,自动停止
影响回溯的手段之二——cut
< cut用法2>单选问题 情况1 动作1 …… 情况n 动作n 例1:sample(case1,X):-!,action1(X). …… sample(casen,X):-!,actionn(X). 比不用!省机时,一旦action1(X)立即停止搜索。
例:
自动实现的搜索算法之二——回溯
clauses likes(tom,talk). /*1*/ likes(bill,swim). /*2*/ likes(bill,talk). /*3*/ friend(john,X):-likes(X,talk),likes(X,swim) /*4*/ 设Goal:friend(john,Who)
如果Goal:likes(tom,swim) 与第5句左部匹配{swim / X} 任务转化为likes(mary,swim) 与1—5匹配均失败
/*1*/ /*2*/ /*3*/ /*4*/ /*5*/
运行
Dialog Goal: likes(tom,swim) False
例2
clauses fact(1,1 ) . /*1*/ fact(X,Y):- X1 =X-1, fact(X1,Y1), Y=X*Y1 . /*2*/ 设Goal:fact(2,N) 与1匹配失败 与2左部匹配成功 {2/X , N/Y} 产生三个子目标: (1) X1=2-1 (2) fact(X1,Y1) (3) N=2*Y1 运行 (1) X1=1 立即成功 Dialog Goal:fact(2,N) (2) fact(1,Y1) N=2 与/*1*/ 匹配成功 {1/Y1 } 1 Solutions (3) N=2*1=2 成功
搜索指针 P1=13失败,p1=4成功,{Who/X} 变量一致化,产生两个子目标: (1) likes(Who,talk) P2-1=1 成功, 变量实例化 {tom/ Who} (2) likes(tom,swim) P2-2=14均失败, Who 与tom 脱解, 回溯——试图重新 满足子目标(1) 重作: (1) likes(Who,talk) P2-1=2失败, P2-1=3成功 {bill/ Who} 运行 (2) likes(bill,swim) P2-2=1失败, P2-2=2成功 Dialog 子目标(1) (2)都成功,所以目标成功 Goal:friend(john,Who) Who=bill 1 Solutions
影响回溯的手段之二——cut
< cut用法3>排除型选择 !与fail配合,使其父结点立即彻底失败 例:clauses super_speed(tom). drunk_drive(tom). legal(X):- super_speed(X),fail. legal(X):- drunk_drive(X),fail. Dialog legal(X). Goal:legal(tom) True 这个运行结果与期望(false)不符
影响回溯的手段之二——cut (截
断)
cut—无条件成功,并截断回溯
(也可以用! 表示)
影响回溯的手段之二——cut
例:p:- q1,q2,r1,r2. p:- s1,s2. 逻辑关系是 if q1 q2r1 r2 or s1 s2 P P1 then p q1 q2 r1 r2 s1 s2 P P2
PROLOG特点
– – – – – – – 超高级语言 说明性语言 (对于某些问题)只要告诉计算机做什么 表达力强 坚实的数学基础—— 一阶谓词逻辑 自动回溯 支持递归归调用 广泛应用于AI领域
PROLOG要点
DOMAINS(论域段) PREDICATES(谓词定义) CLAUSES(事实及规则段)
例1 clauses likes(tom,talk). /*1*/ likes(bill,swim). likes(bill,talk). likes(mary,wine). likes(tom,X):- likes(mary,X). 如果Goal:likes(bill,talk) 与第3句匹配一致 如果Goal: likes(tom,wine) 与第5句左部匹配{wine/ X} 任务转化为likes(mary,wine) 与第3句匹配一致
行)
trace predicates div(real, real, real) 运行示例 int(real) clauses Dialog div(A,B,R):- int(R), R*B<=A, (R+1)*B>A, ! .Goal : div(5,3,Z) Z=1 int(0). 1 Solution int(X):- int(Y), X=Y+1.
影响回溯的手段之二——cut
应改为 legal(X):- super_speed(X),!,fail. legal(X):- drunk_drive(X),!,fail. legal(X).
Dialog Goal:legal(tom) False
运行结果 False 合逻辑 也可用not谓词: legal(X):not(super_speed(X)),not(drunk_drive( X)).
/*2*/ /*3*/ /*4*/ /*5*/
运行
Dialog
Goal:likes(bill,talk) True
运行
Dialog Goal:likes(tom,wine) True
clauses likes(tom,talk). likes(bill,swim). likes(bill,talk). likes(mary,wine). likes(tom,X):- likes(mary,X).
自动实现的搜索算法之一——匹配
Prolog语言能自动将目标与知识库子句集中的事实、规则的 结论部分(从第一句开始到最后一句为止)逐句进行匹配。 下述三种情况之一者匹配成功: (1) 完全相同 例:thief(john) 与 thief(john) (2)谓词相同,相应项一为变量,一为常量 ——变量实例化 例:thief(Y)与thief(john) 匹配结果:Y 被实例化为john {john/Y} (3)谓词相同,相应项均为变量 ——变量一致化
PROLOG自动搜索机制


为满足一目标,从知识库顶起以遍历方式逐一匹配。 如与一事实匹配成功,则将代换表作用于右邻;如 与一规则左部匹配成功,则将代换表作用于规则右 部——化为一系列子目标。 为满足一个子目标,从知识库顶起逐一匹配。如匹 配成功,则返回代换表,并继续试图满足其右邻子 目标;如匹配失败(指针到了库底仍不成功),则 设法重新满足其左邻子目标——回溯。回溯时变量 脱解。
常识:“外Goal‖ 和“程序内goal‖ 有“勤” “懒” 之分
显然,此结果不完备
Press the SPACE bar
影响回溯的手段之一——fail
fail—无条件失败,引起回溯
例: predicates likes(symbol,symbol) goal likes(tom,W),write(―tom likes ‖,W,‖\n‖),fail. 运行结果 clauses Dialog tom likes food. likes(tom,food). tom likes wine. likes(tom,wine). tom likes book. likes(tom,book). Press the SPACE bar fail的作用是引起回溯,以得到全部解 (此例如采用外Goal,不加fail 就能得到全部解 )
可以回溯 如果加入 cut p:- q1,q2,!,r1,r2. p:- s1,s2. 逻辑关系变为 P1 if (if q1 q2 then r1 r2 else s1 s2 ) then p q1 q2 ! r1 回溯
P P P2
r2
s1
s2
截断 回溯
影响回溯的手段之二——cut
< cut用法1>单解问题(外Goal) cut 放在产生器与测试器之后,一旦产生一个合适解,立即停 止递归。 例1:用加法、乘法定义整除(为了观察过程加 trace,F10单步运
DOMAINS child=symbol age=integer
PREDICATES
player(peter,9) player(paul,10) player(chris,9) player(susan,9)
goal
player(Person1,9), player(Person2,9), Person<>Person2
相关文档
最新文档