[Code] Prolog Vergleichsabrfrage

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von sun0025, 7. November 2011 .

Schlagworte:
  1. 7. November 2011
    Prolog Vergleichsabrfrage

    Hi,

    bin gerade dabei ein bisschen Prolog zu lernen und bin auf eine Abfrage gekommen wo ich nicht weiter weiß.

    Folgendes:

    Wir haben eine Datenbank von Büchern, wo deren Verkauf aufgelistet ist:
    Spoiler
    % verkauft(PId,Jahr,Preis,Anzahl).
    verkauft(12345,2005,39,23).
    verkauft(12345,2006,39,11).
    verkauft(12345,2007,29,15).
    verkauft(12345,2008,29,17).
    verkauft(12345,2009,29,9).
    verkauft(12345,2010,23,8).
    verkauft(12346,2004,24,129).
    verkauft(12346,2005,24,270).
    verkauft(12346,2006,24,350).
    verkauft(12346,2007,24,168).
    verkauft(12346,2008,24,89).
    verkauft(12346,2009,24,30).
    verkauft(12346,2010,24,2).
    verkauft(12347,2002,29,430).
    verkauft(12347,2003,34,380).
    verkauft(12347,2004,39,137).
    verkauft(12347,2005,39,24).
    verkauft(12347,2006,39,0).
    verkauft(12347,2007,39,0).
    verkauft(12347,2008,39,0).
    verkauft(12347,2009,39,0).
    verkauft(12347,2010,39,0).
    verkauft(12348,2010,29,412).
    verkauft(12349,2009,17,213).
    verkauft(12349,2010,19,45).

    verkauft(23456,2009,13,0).
    verkauft(23456,2010,13,1).
    verkauft(23457,2009,13,1).
    verkauft(23457,2010,13,2).
    verkauft(23458,2010,13,12).

    verkauft(34567,2008,21,99).
    verkauft(34567,2009,21,124).
    verkauft(34567,2010,21,89).
    verkauft(34568,2006,16,4).
    verkauft(34568,2007,16,28).
    verkauft(34568,2008,16,3).
    verkauft(34568,2009,3,112).
    verkauft(34568,2010,3,89).

    Nun soll folgenden Abfrage generiert werden:
    Von welchen Büchern wurden 2010 mehr Exemplare verkauft, als 2009?

    Meine Idee dazu war folgende:

    ?- verkauft(X,Y,C,A),Y=2009;verkauft(E,R,T,Z),R=2010.

    doch dabei fehlt ja noch der vergleich. Weiß nicht so recht wie ich den hinbekomme?

    so far
    sun
     
  2. 8. November 2011
    AW: Prolog Vergleichsabrfrage

    Ungetestet, da ich grad kein Prolog auf dem Rechner hab:

    Code:
    mehrVerkauft :- not(verkauft(X,2009,_,_)),verkauft(X,2010,_,_).
    mehrVerkauft :- verkauft(X,2009,_,A),verkauft(X,2010,_,B),A < B.
    Erklärung: Die erste Regel greift dann, wenn ein Buch nur 2010 verkauft wurde, aber nicht 2009. Mit der zweiten Regel bekommst du in der Variable A die Anzahl der Bücher X, welche in 2009 verkauft wurden und in B die Anzahl der Bücher X, welche in 2010 verkauft wurden. Der Unterstrich bezeichnet eine anonyme Variable, welche immer dann benutzt wird, wenn du den Wert nicht weiter benötigst. Dabei steht jeder Unterstrich intern für eine andere Variable.

    Bei deiner Anfrage müsstest du als Ergebnis alle Bücher kriegen, die entweder in 2009 oder in 2010 oder in beiden Jahren verkauft wurden. Das bringt dich insofern nicht weiter, dass z.B. bei dem Buch mit der PId "12348" 2010 Exemplare verkauft wurden, aber 2009 nicht. Damit ist die Variable A ungebunden und du kannst keinen Vergleich durchführen (bzw. würdest eine Fehlermeldung bekommen).
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.