Übung 8.1

FGB
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 21. Jan 2006 14:41
Wohnort: Darmstadt
Kontaktdaten:

Übung 8.1

Beitrag von FGB »

Hi zusammen,

stehe bei einer eigentlichen ganz einfachen Aufgabe total auf dem Schlauch. Bei der 1. :D

Datalog:

Folgende Fakten sind gg: succ(1,2), succ(2,3), succ(3,4)

Abzuarbeiten:
numb(X) :- succ(X,_).
numb(X) :- succ(_,X).
gt(A,B) :- succ(B,A).
gt(A,B) :- succ(B,C), gt(A,C).
leq(A,A) :- numb(A),
leq(A,B) :- gt(B,A)

1. Iterationsschritt ist klar, einfach die Fakten wiedergeben
2. Iterationsschritt:
numb(X) jeweils ausgeben und gt(A,B) mit succ(B,A)
für succ(X,_) ist das ja ein gg X und jeweils ein neues passendes "_" und umgekehrt
Also: numb(1), numb(2), numb(3), numb(4)
und: gt(2,1), gt(3,2), gt(4,3)

3. Iterationsschritt sollte dann für das 2. gt sein und das erste leq(A,A)
Hier schonmal die Frage, warum nicht auch noch leq(A,B). Die benötigten Fakten haben wir ja schon oben gesammelt...

Probleme hab ich hier bei gt(A,B) :- succ(B,C), gt(A,C).
Wie kann ich das quasi "aussprechen"?
Versuch: "Für ein gegebenes B und ein gegebens A" ein C finden?
Stehe gerade total auf dem Schlauch. Kann mir jemand ggf kurz helfen?
Wäre super, danke!

Grüße

henß
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 18. Nov 2009 14:50

Re: Übung 8.1

Beitrag von henß »

Grüß Gott,

Du suchst mit der Klausel eine Brücke zwischen nicht-direkten Nachfolgern.
Genauer gesagt suchst Du den direkten Nachfolger C von B und rufst die Klausel rekursiv mit diesem "um 1 Schritt näheren" Wert auf,
in der Hoffnung, daß B kleiner ist als A und Du Dich damit wirklich annäherst.

Das geht solange, wie es direkte Nachfolger von B bzw. von Bs Nachfolgern C gibt. Sollte alles gut gehen, werden sich A und "B"
auf eine Differenz von 1 annähern und gt(A,B) :- succ(B,A). schlägt zu, wenn diese "letzte" Schritt als Fakt vorliegt.

Antworten

Zurück zu „Archiv“