prolog基础

学习目标:

学习prolog的基础使用。这是一门有趣的小众语言。


学习总结

prolog的基础运算符

``prolog的基础关系定义使用的是谓词
比如定义一个朋友关系

friend(Bill,Ana).

则bill是ana的朋友,但反过来并不成立。

friend(Ana,Bill),friend(Bill,Ana).

则可以完整定义出两人的关系。其中", “的意思是and。与此相对的是” ; "它的意思or。
除此之外,prolog还给出了一个推理符号“ :- ”它相当于if。当符号右边的条件满足时,它就执行左边的谓词。

prolog判断时总是从左至右。
prolog的语句以”.“作为结尾标志。
prolog中的变量以大写字母作为开头,小写字母作为常量。

parent(Bill,Ana):-mother(Bill,Ana).
couple(K,J):-father(Bill,K),mother(Bill,J).

第一行式子,当ana是bill的母亲的时候,ana与bill建立parent关系。
第二行式子,当K是bill的父亲且J是bill的母亲时,K和J建立夫妻关系。

prolog的回溯设置

当prolog遇到产生多结果的语句的时候,进行回溯标记。当前路不同时prolog会回溯到最近的一个回溯点进行操作。

我个人的理解是,prolog每次都是查询出结果中的一个,然后设置回溯点,再执行下一条语句。若是此路不通,则回溯上去给出上一次查询点的下一个结果。若是查询不出其他结果了,那就是查询失败了。
使用书上的栗子:定义谓词

parent(Person,Parent):-
	mother(Person,Parent);
	father(Person,Parent).

father(AABB).
parent(BB,CC).

首先程序查询满足father关系的AA与BB,得到A1与B1,为parent设置回溯点。
执行parent,parent包含一个分支,有多结果。为father设置回溯点,执行mother,若mother失败则执行father(2)。若father(2)失败则回溯到father(1)得到另一个结果,再设置回溯点再执行。直到得到所有尝试完成。

递归

懂的都懂,这里只抄一个递归的格式。
创建ancestor递归查询谓词。

ancestor(Person,Ancestor):-parent(Person,Ancestor).
ancestor(Person,Ancestor):-parent(Person,P1),ancestor(P1,Ancestor).

下面代码会返回所有的先祖

ancestor("bill",AA).
write(AA).

可以在末尾添加fail谓词,使输出一个祖先程序就失败。

ancestor("bill",AA).
write(AA).
fail.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值