Aufgabe 2 / Lösungsvorschlag
Erläuterung des Problems:
Wir stellen fest, dass immer nur solche Eigenschaften mehrfach aufgeführt werden, die vererbt werden. Das Problem ist in diesem Fall ganz einfach nachzuvollziehen: beispielsweise erbt 'Vogel' das Merkmal 'waechst' zweimal: einmal von seinem Oberbegriff 'Tier', welches es von 'Lebewesen' geerbt hat, und einmal von 'Lebewesen' selbst (von dem es ja auch Unterbegriff ist). Noch deutlicher wird das Problem, wenn man in der Hierarchie weiter nach unten geht: 'Spatz' erbt 'waechst' gleich viermal: zweimal von 'Vogel' (Vogel erbt es einmal von Tier, einmal von Lebewesen), einmal von 'Tier' (Tier erbt es von Lebewesen) und einmal von 'Lebewesen' (Lebewesen ist es direkt zugewiesen).
Behebung des Problems:
Offensichtlich muss das Prädikat eigenschaft/2
modifiziert werden,
um die
Mehrfachnennungen zu verhindern. Hier stehen uns verschiedene Möglichkeiten zur
Verfügung:>
- Möglichkeit A: Der CUT
-
Hier wird durch den Cut ein erneuter Aufruf von
unterbegriff/2
abgeschnitten. Diese Möglichkeit liefert de facto dasselbe Ergebnis wie C:eigenschaft(X,Y):-
unterbegriff(X,Z),!,
eigenschaft(Z,Y),
not(konflikt(X,Y)) . - Möglichkeit B:
merkmal/2
statteigenschaft/2
-
Hier werden für jeden Oberbegriff nur noch die direkt zugewiesenen Merkmale aufgeführt, die Mehrfachvererbung entfällt also:
eigenschaft(X,Y):-
unterbegriff(X,Z),
merkmal(Z,Y),
not(konflikt(X,Y)) . - Möglichkeit C:
ist_ein/2
stattunterbegriff/2
-
eigenschaft(X,Y):-
ist_ein(X,Z),
eigenschaft(Z,Y),
not(konflikt(X,Y)) .