#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 + Multi-Zitat Zitieren
#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). + Multi-Zitat Zitieren