Search code examples
prologzebra-puzzle

Make rule out of a hint in prolog


I have interpreters and languages.

interpreter(fran,french).
interpreter(geraldine,german).
interpreter(dudley,dutch).
interpreter(spike,spanish).
interpreter(polly,polish).
interpreter(ron,romanian).

language(french).
language(german).
language(dutch).
language(spanish).
language(polish).
language(romanian).

and the rule: No interpreters speak the same language.

Any help?


Solution

  • One way to approach this is to first check if any two interpreters speak the same language, and then check if the negation of that rule is true.

    rule2 :- not(nrule2(X, Y)).
    nrule2(X, Y) :- interpreter(X, L1), interpreter(Y, L2), X \= Y, L1 = L2.
    

    rule2 is only true above if no two interpreters speak the same language.