Search code examples
prolog

Prolog find father_in_law


m([ himu, eric, shawn, wasim, steve,
    korim, mark, romiz,  yash, ben, mathew,protik,
  labib, tim, sam, richard, sultan,liton,sazid]).
f([ soma, sarah, priti, anika, rokeya, marry,
    lucy, rimi, kani, buni, sanjida, raidah, maria, hema,
   cathrin, pauly,lili]).

%third generation
family([wasim, priti, [soma]]).
family([korim, anika, [eric, marry]]).
family([yash,lili,[protik]]).
%second generation
family([mark, lucy, [wasim, rimi]]).
family([ben, sanjida, [priti, mathew]]).
family([romiz, kani, [anika, yash]]).
family([sazid, raidah, [korim]]).
%first generation
family([tim, maria, [lucy]]).
family([sam, hema, [ben]]).
family([richard, cathrin, [romiz]]).
family([sultan, pauly, [sazid,liton]]).


parent(tim,lucy).
parent(maria,lucy).
parent(sam,ben).
parent(hema,ben).
parent(richard,romiz).
parent(cathrin,romiz).
parent(sultan,sazid).
parent(pauly,sazid).
parent(pauly,liton).
parent(sultan,liton).
parent(sam,korim).
parent(raidah,korim).
parent(romiz,anika).
parent(romiz,yash).
parent(kani,anika).
parent(kani,yash).
parent(ben,priti).
parent(ben,mathew).
parent(sanjida,priti).
parent(sanjida,mathew).
parent(mark,wasim).
parent(mark,rimi).
parent(lucy,wasim).
parent(lucy,rimi).

parent(korim,eric).
parent(korim,marry).
parent(anika,eric).
parent(anika,marry).
parent(wasim,soma).
parent( priti, soma).
parent(yash,protik).
parent(lili,protik).

father_in_law(X, Y) :-
    male(X) ,family([Z,Y|[_]]),parent(X, Z).

Here for father_in_law I only get wife's father_in_law. But I want also husband's father_in_law in this. Unable to understand how. Is this possible?


Solution

  • You need to change to:

    male([ himu, eric, shawn, wasim, steve,
        korim, mark, romiz,  yash, ben, mathew,protik,
      labib, tim, sam, richard, sultan,liton,sazid]).
    female([ soma, sarah, priti, anika, rokeya, marry,
        lucy, rimi, kani, buni, sanjida, raidah, maria, hema,
       cathrin, pauly,lili]).
    
    father_in_law(X, Y) :-
        male(XM) ,member(X,XM),family([Z,Y,[_|_]]),parent(X, Z).
    father_in_law(X, Y) :-
        male(XM) ,member(X,XM),family([Y,Z,[_|_]]),parent(X, Z).
    

    This gets husband's father_in_law.