predicates % First and Second - function params % First - child Second nondeterm parent(symbol,symbol). % When First have parent - return "yes" nondeterm islucky(symbol). % When First have two children - return "yes" nondeterm twochildren(symbol). % When First gave nondeterm sister(symbol, symbol). nondeterm aunt(symbol, symbol). nondeterm grandson(symbol, symbol). clauses islucky(Name):- parent(Name,_). twochildren(Name):- parent(Name, Child1), parent(Name, Child2), Child1 <> Child2. grandson(Child, Adult):- parent(Adult,X), parent(X, Child). sister(Sis, Bro):- parent(X, Sis), parent(X, Bro). aunt(Adult, Child):- sister(Adult, X), parent(X, Child). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pam, jim). % % +---+ +---+ % |jim| |pat| % +-+-+ +-+-+ % ^ ^ % | | % +-+-+ +-+-+ +---+ % |pam+-->+bob+-->+ann| % +---+ +-+-+ +---+ % ^ % | % +-+-+ +---+ % |tom+-->+liz| % +---+ +---+ % GOAL % 4.1 % parent(pam, bob). % YES % parent(tom, bob). % YES % parent(tom, liz). % YES % parent(ann, bob). % NO % 4.2 % parent(X,pat). % bob % parent(liz,X). % tom % parent(Y,X), parent(X, pat). % pam, tom % 4.last.1 % islucky(pat). % NO % islucky(bob). % YES % 4.last.2 % twochildren(pam). % YES % twochildren(tom). % YES % twochildren(pat). % NO % 4.last.3 % grandson(pat,pam). % YES % grandson(pam,pat). % NO % 4.last.4 % sister(bob, jim). % YES % sister(pat, ann). % YES %sister(bob, tom). % NO % % aunt(jim, pat). % YES % aunt(jim, ann). % YES % aunt(ann, jim). % NO % aunt(jim, bob). % NO