第一个例子:递归
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).