Verständnisfrage: Datalog

  • Themenstarter Themenstarter Gelöschtes Mitglied 16444
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 16444

Guest
Moin, moin!

Ich habe da eine Verständnisfrage zu Datalog. Die Grundsätzliche Idee ist mir klar, deswegen verstehe ich auch, warum das Ergebnis so sein muss, wie es ist, aber der Weg dahin leuchtet mir noch nicht so ein. Aus dem Buch "Database Management Systems" ist folgendes Beispiel:

Code:
 part | subpart | qty
---------------------
trike | wheel   | 3
trike | frame   | 1
frame | seat    | 1
frame | pedal   | 1
wheel | spoke   | 2
wheel | tire    | 1
tire  | rim     | 1
tire  | tube    | 1

Components(Part, Subpart) :- Assembly(Part, Subpart, Qty).
Components(Part, Subpart) :- Assembly(Part, Part2, Qty),
                             Components(Part2, Subpart).

Wenn man jetzt Part=trike, Subpart=wheel und Qty=3 setzt, dann ist die erste Zeile klar, die Startinstanz von Components bekomme ich hin und kann ich nachvollziehen, aber danach harkt es bei mir.
Zu lesen ist die zweite Zeile ja quasi als "Für alle Werte von Part, Part2, Subpart und Qty: Wenn ein Tupel <Part, Part2, Qty> in Assembly existiert und ein Tupel <Part2, Subpart> in Components existiert, dann muss das Tupel <Part, Subpart> auch in Components existieren".

Ich habe also nach Anwendung der ersten Zeile das Tupel <trike, wheel> in Components. Wie mache ich jetzt weiter? Wenn immer noch Part=trike ist und Qty=3, dann trifft das ja nur auf die erste Zeile in Assembly zu. Da aber in Components kein Tupel <wheel, wheel> existiert, trifft die Zweite Zeile doch nie zu? Und an der ersten hat sich ja dann nichts verändert?
 
Zurück
Oben