Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
3.1k views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...