Plog(2)

• 规则的应用:
• 例: 一个普通的规则
• greatgrandparent(GGP,GGC) :-               <-----------------------规则头
• parent(GGP,GP),                                        <-----------------------规则条件
• parent(GP,P),
• parent(P,GGC).
• 
• 我们可以把规则理解为一个函数,这是一个有递归与回溯的函数. 比如parent(GGP,GP)被通过了验证,则GGP,GP的值则被确定了,然后把GP代入到parent(GP,P)中一旦通过了验证则P也被确定了,以此类推,当parentGGP,GP), parent(GP,P),parent(P,GGC).都被确定时,则它们的父结点greatgrandparent(GGP,GGC)中的GGP,GGC则被确定了,从而求解过程结束.
 我们来看一个程序:
 parent(kim,holly).
 parent(margaret,kim).
 parent(margaret,kent).
 parent(esther,margaret). parent(herbert,margaret).
 parent(herbert,jean).
 greatgrandparent(GGP,GGC) :-
   parent(GGP,GP), parent(GP,P), parent(P,GGC).
 其知识树是这样的:


 
 我们输入如下语句:
  ?- greatgrandparen(esther,GreatGrandchild),
    write(GreatGrandchild), write("/n").
 得到结果:
 holly
 Yes
 
 我们进一步来设计一个模拟数据库
 源程序:
 % Database
 course(logic, time(monday, 8, 10), dave, a12).
 course(java, time(tuesday, 9, 11), ad, r204).
 
 lecturer(Lecturer,Course) :-
     course(Course,_,Lecturer,_).                    %_代表忽视参数
 
 duration(Course,Length) :-
     course(Course,time(_,S,F),_,_),              
     Length is F-S.                                               %is 是一种赋值运算符  
 
 teaches(Lect,Day) :-
     course(_, time(Day,_,_), Lect, _).
 
 occupied(Room,Day,Time) :-
     course(_,time(Day,S,F),_,Room),
     S =< Time,
     Time =< F.
 
 在命令行中我们可以尝试数据的查询了:
 1 查询是谁在教logic这门课
 ?- lecturer(L, logic), write(L), write("/n").
 结果:
 dave
 yes
 2 查询是谁在星期三占用了r204房间
 ?- occupied(r204, wednesday, Time).
 结果:
 no
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值