Math. - Naturwiss. Fakultät Fachbereich Informatik Kognitive Systeme . Prof. A. Zell Artificial Intelligence, Wintersemester 2014/2015 Übungsblatt 1 Abgabe: 30.10.14, Besprechung: 06.11.14 Wichtig: Melden Sie sich (falls noch nicht geschehen) als ÜbungsteilnehmerIn bis spätestens zum 30.10.2014 unter (http://www.cogsys.cs.uni-tuebingen.de/lehre/ws14/ki.html) für die Übungen an. Hinweise: Begründen Sie Ihre Antworten immer, selbst bei ja/nein-Fragen, außer die Aufgabenbeschreibung sagt explizit etwas anderes, ansonsten kann dies zu Punktabzügen führen. Programme, die sich nicht übersetzen lassen oder nicht lauffähig sind, werden automatisch mit 0 Punkten bewertet. Geben Sie bitte Programme und Funktionen als Textdatei ab. Aufgabe 1 Programmierung in Lisp [20 Punkte] Installieren Sie als Vorbereitung für das Übungsblatt einen Interpreter für Common-LISP, z. B. GNU CLISP http://www.clisp.org/, und machen Sie sich mit diesem vertraut. (a) Implementieren Sie eine rekursive Funktion countlist(a, l), welche das Vorkommen von a in der Liste l zählt. Achten Sie darauf, dass der Algorithmus auch für die leere Liste sinnvoll terminiert (2 Punkte). (b) Erweitern Sie obige Funktion nun zu einer rekursiven Funktion counttree(a, t), welche das Vorkommen von a in einem Baum t zählt. Hierbei sei jeder Knoten des Baums gegeben durch eine Liste seiner Kinder (2 Punkte). (c) Implementieren Sie eine Funktion inserttree(a, t), welche das Element a in den binären Suchbaum t an der richtigen Stelle einfügt. Wenn a schon in t vorkommt, soll t unverändert zurückgegeben werden (2 Punkte). (d) Implementieren Sie die kgV-Funktion (kleinstes gemeinsames Vielfaches), die zwei beliebige natürliche Zahlen (inklusive 0) als Eingaben annimmt, ohne die eingebaute Funktion lcm zu nutzen (2 Punkte). (e) Implementieren Sie die ggT-Funktion (größter gemeinsamer Teiler) unter Verwendung der zuvor implementierten kgV-Funktion (1 Punkte). (f) Implementieren Sie die eulersche Phi-Funktion, die für eine natürliche Zahl n > 0 wie folgt definiert ist: ϕ(n) = |{m | 1 ≤ m ≤ n ∧ ggT(m, n) = 1}| (3 Punkte). (g) Implementieren Sie die Funktion take(l, n), die die ersten n Elemente einer Liste l zurückgibt (2 Punkte). (h) Implementieren Sie die Funktion drop(l, n), die die Liste l ohne die ersten n Elemente zurückgibt (1 Punkte). (i) Implementieren Sie die Funktion listmerge(a, b, c), die zwei sortierte Listen a und b zu einer einzigen sortierten Liste c zusammenfügt. Dabei sollen mehrfach vorkommende Zahlen in der vereinigten Liste nur einmal vorkommen (3 Punkte). Beispiel: Aus den Listen (1 5 9) und (2 5 8 8) soll (1 2 5 8 9) werden. (j) Implementieren Sie eine Funktion f ib(n), die die Fibonacci-Zahlen für n ∈ N ∪ {0} ausgibt, mit f (0) = 0 und f (1) = 1, und schreiben Sie ein Programm, welches die Fibonacci-Zahlen für n von 1 bis 15 (einschließlich) mittels dieser Funktion in aufsteigender Reihenfolge ausgibt (2 Punkte). Laden Sie Ihre kommentierten Implementierungen bzw. Ihre Lösungen bei ILIAS hoch. Dabei genügt pro Übungsgruppe eine Abgabe. Nutzen Sie dazu die Funktion der Gruppenabgabe. Bitte tragen Sie außerdem Ihre Matrikelnummer unter Persönliche Daten und Profil“ in Ihrem ILIAS-Accounts nach, ” ohne diese dabei unter Profil“ öffentlich zugänglich zu machen. ”