Übungsaufgaben für Prolog 1. Implementieren Sie eine symbolische Arithmetik. Dabei sollen die natürlichen Zahlen durch 0, s(0), s(s(0)), ... dargestellt werden. Die Operationen sind dann dreistellige Prädikate. 2. Beschreiben Sie die Pfadsuche in einem Baum. 3. Beschreiben Sie die Suche nach Permutationen durch ein Prädikat der Form permutation(L,P), wobei P alle Permutationen von L ausgibt. 4. Programmieren Sie die Umkehrung von Listen. 5. Nutzen Sie dieses Prädikat, um festzustellen, ob eine gegebene Liste ein Palindrom ist. 6. Programmieren Sie ein Prädikat, das feststellt, ob eine Liste Elemente doppelt enthält. 7. Beschreiben Sie einen Sortieransatz, bei dem zuerst alle Permutationen erzeugt werden und diese dann darauf getestet, ob sie geordnet sind. 8. Programmieren Sie Insertion-Sort. 9. Programmieren Sie Quicksort. 10. Programmieren Sie die Vektormultiplikation über dem Körper mit sieben Elementen. 11. Schreiben Sie ein Programm, das die Fibonacci-Zahlen berechnet. 12. Schreiben Sie ein Programm, das zu einer gegebenen Zahl n alle Primzahlen findet, die kleiner sind als n. 13. Schreiben Sie zwei Versionen eines Programmes, das die natürlichen Zahlen in drei Klassen einteilt: positiv, negativ und null. Bei der ersten benutzen Sie den cut bitte nicht, beider zweiten verwenden Sie ihn bitte. 14. Schreiben Sie ein Programm, das als Eingabe eine Liste von Zahlen nimmt und die Zahlen dann als Reihen mit Sternen ausgibt, also: Die Eingabe [1,2,3] soll drei Zeile liefern, eine mit einem Stern, eine mit zweien und eine mit dreien. 15. Schreiben Sie ein Programm mit E/A-Dialog: Eingabe: zwei natürliche Zahlen n1, n2, Ausgabe: alle Quadratzahlen, deren Wurzel zwischen n1 und n2 liegt. 16. Bringen Sie die Programme der Vorlesung zum Laufen: Fibonacci, Termsubstitution, Wegfinden. 17. Erweitern Sie das Wegfindeprogramm so, daß es einen Weg mit minimalen Kosten findet. 18. Schreiben Sie ein Programm, das zu einer gegebenen kontextfreien Grammatik G und einem Wort w feststellt, ob w in L(G) ist 19. Erweitern Sie das Programm so, daß sogar ein Ableitungsbaum konstruiert wird. 20. Programmieren Sie das Spiel "Die Türme von Hanoi" auf zwei Weisen. In beiden Fällen soll die Ausgabe eine Folge von Handlungsbeschreibungen sein, im ersten Fall soll die Ausgabe die Form "Eine Scheibe von Turm x nach Turm y" haben und im zweiten Fall die Form "Scheibe n von Turm x nach Turm y" . Für die Ausgabe benutzen Sie bitte das Prädikat write in den Formen write('Text') und write(Variable), für den Zeilenumbruch verwenden Sie nl. 21. Programmieren Sie das Wolf-Ziege-Kohlkopf-Problem mit Hilfe geeignet zu definierender Datenstrukturen. 22. Schreiben Sie ein Programm, das aus einem englischen Singular einen Plural macht. 23. Schreiben Sie ein Programm, das zu einer Menge deren Potenzmenge konstruiert. 24. Schreiben Sie ein Programm, das Sudokus löst.