Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.4k views
in Technique[技术] by (71.8m points)

artificial intelligence - is it possible to prove nested rule in prolog?

I'm trying to call a rule inside another rule my code is to fined the grandpa just like:

male(jack).
male(john).
male(mark).
parent(jack,john).
parent(john,mark).
father(X,Y):-male(X),parent(X,Y).
grandpa(X,Y):-father(X,father(F,Y)).

and the query in GNU Prolog is

grandpa(X,mark).

it just returns no and when I tried to trace the call I noticed that it doesn't even call the nested rule. So is there any way to do this in prolog?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Rules aren't functions (which is why they aren't called functions): you don't call them, you prove them. To do what you seem to be asking, you would write:

grandpa(X,Y) :- father(X,Z), father(Z,Y).

That is: X is Y's grandpa if there exists a Z such that X is Z's father and Z is Y's father.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...