Gegeben ist folgendes Prologprogramm:
/*gemeint soll hier sein: genoveva ist Mutter von clothilde*/
kind_von(genoveva,clothilde).
kind_von(genoveva,xenia).
kind_von(karl,clothilde).
kind_von(karl,xenia).
kind_von(karl,sofonisba).
kind_von(walpurga,sofonisba).
kind_von(chlodwig,ernestine).
kind_von(clothilde,ernestine).
kind_von(xenia,otto).
kind_von(hjalmar,otto).
kind_von(xenia,cythia).
kind_von(hjalmar,cythia).
/*Hier steht zuerst immer die Frau*/
ehepaar(xenia,hjalmar).
ehepaar(genoveva,karl).
ehepaar(ernestine,otto).
maennlich(karl).
maennlich(otto).
maennlich(chlodwig).
maennlich(hjalmar).
weiblich(genoveva).
weiblich(xenia).
weiblich(clothilde).
weiblich(ernestine).
weiblich(cythia).
weiblich(sofonisba).
weiblich(walpurga).
Die vorgestellten Sippen sind matriarchalisch organisiert. Interessant ist die weibliche Linie, männliche Vorfahren spielen nur eine bescheidene Rolle. Definieren Sie ein Prädikat vorfahr_weibliche_linie_von(Nachfahr,Vorfahrin), das abprüft ob 'Vorfahrin' ein weiblicher Vorfahr von Nachfahr ist (bzw. die/die weiblichen Vorfahren ermittelt). Die Abfrage sollte etwa so möglich sein:
?- vorfahr_weibliche_linie_von(cythia,Vorfahrin)
Vorfahrin = xenia
YES;
Vorfahrin = genoveva
YES;
NO