Gedächtnisprotokoll SE-3LP09-1

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen

Die Logik- und die Funktionale-Klausur waren im selben Raum.

weitere Infos bitte - war es schwer?



Softwareentwicklung III - Logik Programmierung, Klausur 1 WS08/09[Bearbeiten]

Bearbeitungszeit: 120 Minuten

Insgesamt 60 Punkte.


Aufgabe 1[Bearbeiten]

Geben Sie die Ausgabe am Systempromt an.

1.?- add(3,5,Summe) = add(Summand1,Summand2,7).

2.?- member(X,[1,2,3,4]), X is floor(X/2)*2.

3.?- X is member(X,[1,2,3,4]).

Aufgabe 2[Bearbeiten]

1.Was bewirkt ein cut?

2.Erläutern Sie an einem Beispiel die Wirkungsweise eines Cuts.

Aufgabe 3[Bearbeiten]

Es wurde eine Datenbank für eine kleine Videothek gegeben.

%kunde(Name, Vorname, Kundennummer, Straße, Stadt)

%film(Filmnummer, Name, Kategorie)

%datentraeger(Datentraegernummer, Medium(vhs oder dvd), Filmnummer)

%ausleihe(Vorgangsnummer, Kundennummer, Datentraegernummer, Gefordertes_rueckgabedatum)

%rueckgabe(Datentraegernummer, Gefordertes_rueckgabedatum, Eventuelle_schaeden)


Zunächst sollte man Anfragen stellen.

1. Hat Susi Sorglos schoneinmal einen Film ausgeliehen?

2. Welche Filme gibt es nur auf vc und nicht auf dvd?

3. Von welchem Film gibt es nur ein Exemplar?

4. Von welchem Film sind alle Exemplare ausgeliehen?


Aufgabe 4[Bearbeiten]

Es mussten zu obiger Datenbasis nun selber Prädikate geschrieben werden. Die Überschrift der Aufgabe lautete Resultatsaggregation, was ein Hinweis darauf ist, dass man findall/3 benutzen sollte.

1. Schreiben sie ein Prädikat, was zu einer gegebenen Kategorie, die Anzahl der bisher ausgeliehenen Filme ausgibt.

2. Schreiben sie ein Prädikat, was zu einem gegebenem Monat die Kategorie ausgibt, von der die meisten Filme ausgeliehen wurden. Es gibt die Kategorien: action, erotik, horror, kinder, krimi

Hinweis: Sortieren ist mit dem Prädikat sort/2 möglich, die Ausgabereihenfolge ist aber aufsteigend.

Aufgabe 5[Bearbeiten]

Es sollten wieder Prädikate geschrieben werden.

1. Schreiben sie ein Prädikat, was zu gegebenem Kunden eine Liste absoluter Häufigkeiten der Ausleihung pro Kategorie zurückgibt. Z.B. bedeutet [0,0,0,1,4] dass ein Kunde 1 Kinderfilm und 4 Krimis bereits ausgeliehen hat.

2. Wandeln sie eine solche Liste absoluter Häufigkeiten in eine Liste relativer Häufigkeiten um, indem sie ein rekursives Prädikat verwenden. Zu der vorherigen Liste wäre z.B. [0,0,0,0.2,0.8] eine solche relative Liste.

3. Wie 2., nur verwenden sie nun ein Prädikat höherer Ordnung.

4. Vergleichen sie dass in 2. und 3. geschriebene Prädikat auf Effizienz und Verständlichkeit.

Aufgabe 6[Bearbeiten]

1. Hier gab es eine schicke Formel mit der der Videotheks-chef nun seine Kundenprofile auswerten wollte. Formel dürfte in etwa folgende sein:

<math> z = {{1}\over{\sqrt{\sum^n_{i=1} (x_i-y_i)^2}}}</math>

Mit den aus der Aufgabe 5 berechneten Nutzerprofilen(die Listen relativer Häufigkeiten) sollte nun dieser Wert da berechnet werden. Dabei sollte einmal eine endrekursive und einmal eine nicht-endrekursive Variante verwendet werden.

2. Kann man auch dies mit einem Prädikat höherer Ordnung berechnen(analog wie bei Aufgabe 5 Teilaufgabe 3.)? Begründen sie!

Aufgabe 6[Bearbeiten]

1. Diese Aufgabe bestand daraus, auszuwerten was ein kleines Scheme Programm macht:

Zu was evaluiert

(list (+ (* 2 2)
         (+ 1 2)
         (- (/8 4) 2)
      )
 )

2. Drei andere kleine Scheme Programme, aus denen wir herausfinden sollten, welches bedeutungsgleich zu dem aus der vorherigen Teilaufgabe ist.

3. Was ist der Unterschied zwischen specialform expressions und Funktionen? Erläutern sie an einem Beispiel.

4. Was berechnet folgende Scheme Funktion? x ist Liste von Atomen, y ist ein Atom

( define (blub x y)
   ( if 
         (null? x)
            quote ()
            (if (eq? (car x) y)
                    (blub (cdr x) y)
                    (cons (car x) (blub (cdr x) y) )
             )
    )
)


5. Das Scheme-Programm aus 4. in Prolog programmieren.