learn prolog now3

本文通过一系列递归示例解释了Prolog编程的基础,包括关系的定义、递归查找和避免无限循环的问题。讨论了如何在Prolog中实现旅行路径的搜索,以及直接火车旅行的双向性问题,并分析了可能导致无限循环的原因。
摘要由CSDN通过智能技术生成

第一个例子:递归

is_digesting(X,Y) :- just_ate(X,Y).
is_digesting(X,Y) :- just_ate(X,Z), is_digesting(Z,Y).

just_ate(mosquito,blood(john)).
just_ate(frog,mosquito).
just_ate(stork,frog).

第二个例子,为什么递归有用?

child(martha,charlotte).
child(charlotte,caroline).
child(caroline,laura).
child(laura,rose).

descend(X,Y) :- child(X,Y).
descend(X,Y) :- child(X,Z),
child(Z,Y).

知识库,这里面只能第一两层关系

使用query:descend(martha,laura).将会回答NO。

递归定义:

descend(X,Y) :- child(X,Y).
descend(X,Y) :- child(X,Z),
descend(Z,Y).

第三个例子

如何定义一个自然数的集

numeral(0).
numeral(succ(X)) :- numeral(X).

枚举有一些自然数: numeral(X).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值