GLoLoP-Tutorium (06.02.2009) 2Bei jedem Zug darf die oberste Scheibe eines beliebigen Stabes auf einen der beiden anderen Stäbegelegt werden, vorausgesetzt, dort liegt nicht schon eine kleinere Scheibe. Folglich sind zu jedemZeitpunkt des Spieles die Scheiben auf jedem Feld der Größe nach geordnet.Schreiben Sie ein rekursives <strong>Prolog</strong>-Programm, das eine korrekte Zugreihenfolge ausgibt (mit writebzw. writeln, das Speichern in einer Liste o.ä. ist nicht notwendig)!Idee: zuerst die obersten N − 1 Scheiben auf einen Hilfsstapel verschieben und dann die untersteScheibe gefolgt vom Rest auf den Zielstapel legen.2. Grundlagen: Listen in <strong>Prolog</strong>2.1 Zugehörigkeit ASchreiben Sie ein <strong>Prolog</strong>-Prädikat enthaelt(L, E) das genau dann erfüllt ist, wenn die Liste L dasElement E enthält.2.2 Länge ASchreiben Sie ein Prädikat laenge(L, R), das die Länge R einer Liste L ermittelt.2.3 Anhängen AA• Element an Liste anhängenSchreiben Sie ein Prädikat anhaengen(L, E, R), das das Element E hinten an die Liste L anhängtund in R das Ergebnis liefert: anhaengen([1,2,3], 4, [1,2,3,4])• Listen aneinanderhängenSchreiben Sie ein Prädikat aneinanderhaengen(L1, L2, R), das die beiden Listen L1 und L2zur Liste R zusammenhängt: aneinanderhaengen([1,2], [3,4], [1,2,3,4])2.4 Umkehren AAASchreiben Sie ein Prädikat umkehren(L, R) das die Liste L umkehrt und das Ergebnis in R speichert.Hinweis: Verwenden Sie ein Hilfsprädikat mit einer Akkumulator-Variablen!2.5 Entfernen AA• Schreiben Sie ein Prädikat entfernen1(L, N, R), das das N-te Element (beginnend bei 0) ausder Liste L entfernt: entfernen1([1,2,3,4,5], 2, [1,2,4,5])• Modifizieren Sie das Prädikat unter dem Namen entfernen2 so, dass jedes N-te Element entferntwird: entfernen2([1,2,3,4,5,6,7], 3, [1,2,4,5,7])• Schreiben Sie ein Prädikat entfernen3(L,E,R), das alle Vorkommen eines bestimmten Elementesaus einer Liste entfernt: entfernen3([1,2,1,2,3,1], 1, [2,2,3])
GLoLoP-Tutorium (06.02.2009) 32.6 Minimum AAASchreiben Sie ein Prädikat minimum(L,M), das die kleinste Zahl M in einer Liste L findet!2.7 Summe AASchreiben Sie ein Prädikat summe(L,S), das die Summe S der Zahlen in einer Liste L berechnet.2.8 Verdoppeln AASchreiben Sie ein Prädikat verdoppeln(L,R) das jedes Element einer Liste verdoppelt:?- verdoppeln([1,2,3], R).R = [2,4,6]2.9 Erstellen einer Liste AASchreiben Sie ein Prädikat zahlen(A,B,L), das ein Liste L mit allen ganzen Zahlen im Intervall [A; B]erzeugt (A ≤ B).Weitere <strong>Aufgaben</strong>: http://wwwcip.cs.fau.de/ ∼ simagrop/glolop/listen.html3. Grundlagen: Graphen in <strong>Prolog</strong>In den folgenden <strong>Aufgaben</strong> geht es um diesen Graphen:abfcgdeedge(a,b). edge(b,c). edge(c,d). edge(d,e).edge(a,f). edge(f,g). edge(g,d). edge(g,e).3.1 Erreichbarkeit AASchreiben Sie ein Prädikat reachable(X,Y) das angibt, ob ein Knoten Y von einem Knoten X auserreichbar ist. Dabei soll die Pfeilrichtung beachtet werden.?- reachable(f,e).Yes.?- reachable(b,g).No.