Search code examples
prolog

Create rules from text Prolog


I have this written sentence:

John is a footballer. Mary is an actress. All of Mary's friends are footballers and are blond (their hair). All of John's friends are footballers or actors.

How could i create Prolog rules for last two sentences? This is what i have for now:

footballer(john).
actor(Mary).
color(blond)  # not sure if its ok

Solution

  • footballer(john).
    footballer(joe).
    
    actor(mary).
    actor(kevinbacon).
    
    singer(elvis).
    
    cosmonaut(yuri).
    
    friend(john, X) :- footballer(X).
    friend(john, X) :- actor(X).
    

    See that asking ?- friend(john, F). finds joe, mary and kevinbacon, and does not find elvis or yuri.

    You can do a similar thing for friend(mary, X) and blonde_hair(marilyn).

    You may need to work out how to say that John is not friends with himself, perhaps using dif/2.


    This approach is quite simple and you can ask "who is a footballer?" but you cannot easily ask "what does John do?". For that you might consider:

    person_job(john, footballer).
    person_job(ronaldo, footballer).
    
    person_job(mary, actress).
    person_job(elvis, singer).
    
    person_haircolour(elvis, black).
    person_haircolour(sia, blonde).
    

    and building on those relations (relating a person to their job, a person to their hair colour) will let you ask "who is a footballer?" as well as "what does John do?" or "who has blonde hair?".

    (All John's friends are footballers, but are all thousands and thousands of footballers friends with John?)

    (Is it a trick prompt, Mary is an actress, John is friends with actors?)