10.10.2013 Aufrufe

Aufgaben Logische Programmierung

Aufgaben Logische Programmierung

Aufgaben Logische Programmierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Unter einer Teilliste einer Liste L wollen wir eine Liste T verstehen, die sich dadurch ergibt,<br />

dass man aus L null oder mehr Elemente auswählt und daraus eine Liste bildet, in der die<br />

Reihenfolge der ausgewählten Elemente gleich wie in L ist. So ist z.B. [s,b,g] eine Teilliste der<br />

Liste [s,a,l,z,b,u,r,g]. Definieren Sie ein Prädikat teilliste/2, sodass Prolog z.B. auf die<br />

Anfrage<br />

?- teilliste(T,[s,a,l,z,b,u,r,g]).<br />

bei wiederholter Eingabe des Strichpunkts für T alle 256 Teillisten der Liste [s,a,l,z,b,u,r,g]<br />

liefert! Eine der Antworten lautet dann T=[s,b,g].<br />

Lassen Sie sich mit dem in Prolog eingebauten Prädikat findall/3 durch die Anfrage<br />

?- findall(T, teilliste(T,[a,b]), Teillisten).<br />

die Liste aller Teillisten T der Liste [a,b] ausgeben! Was Prolog dabei macht, ist, dass es für jede<br />

Lösung des Ziels teilliste(T,[a,b]) den entsprechenden Wert von T in eine Liste aufnimmt<br />

und die Variable Teillisten dann mit der resultierenden Liste unifiziert. Lassen Sie sich nun<br />

die Anzahl der Teillisten der Liste [s,a,l,z,b,u,r,g] mit der Anfrage<br />

?- findall(T, teilliste(T,[s,a,l,z,b,u,r,g]), Teillisten),<br />

length(Teillisten, Anzahl_der_Teillisten).<br />

ausgeben! Das Prädikat length/2 zur Berechnung der Länge einer Liste ist in vielen Prologs<br />

eingebaut. Man kann es wie in der Datei listenlaenge.pl gezeigt aber auch leicht selbst definieren.<br />

Die Teillisten der Liste [s,a,l,z,b,u,r,g] entsprechen genau den Teilmengen der<br />

Menge {s, a, l, z, b, u, r, g}. Davon gibt es 2 8 = 256.<br />

Aufgabe 20 Cliquen-Problem 2<br />

Dateiname: a20_clique2.pl<br />

Lesen Sie sich nochmals die Angabe von Aufgabe 5 (Cliquen-Problem) durch! Man kann die<br />

Situation durch einen ungerichteten Graphen darstellen (Datei clique.ps). Eine Clique ist dann<br />

eine Menge von Knoten des Graphen, von denen jeder mit jedem anderen verbunden ist. In<br />

unserem Beispiel ist {franz, berta, dora} eine Clique, da jeder darin genannte Knoten mit jedem<br />

anderen verbunden ist. Eine solche Menge kann man in Prolog als Liste darstellen, etwa als Liste<br />

[franz,berta,dora]. Definieren Sie nun ein Prädikat clique/1, das von einer solchen Liste<br />

testen kann, ob sie eine Clique darstellt. Z.B. sollte die Anfrage<br />

?- clique([franz,berta,dora]).<br />

die Antwort yes oder true liefern. Die Anfrage<br />

?- clique([berta,dora,franz]).<br />

sollte die gleiche Antwort liefern. Alle Cliquen aus mehr als einer Person haben also mehrere<br />

Darstellungen als Liste. Verwenden Sie nun das Prädikat der vorigen Aufgabe und stellen Sie die<br />

Anfrage<br />

?- teilliste(Clique, [anton,berta,christa,dora,ernst,franz]),<br />

clique(Clique).<br />

12

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!