Gedächtnisprotokoll SE-3FP09-1

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen

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

Bearbeitungszeit: 120 Minuten

Insgesamt 70 Punkte, für jede Aufgabe insgesamt 10


Aufgabe 1 - Auswerten und Notation[Bearbeiten]

  • Zu welchen Werten evaluieren die folgenden Ausdrücke?
(* (- 6 5) 2)
(car '(((Foo) bar) bla))
(cdr '(((Noch) so) ein Ausdruck))
(map car '((1 . 1) (1 . 2) (1 . 3)))
(filter number? '(#t drei "vier" 42 (1 2)))
  • Wandeln Sie die folgenden Ausdrücke in Scheme um (LaTeX scheint im Wiki nicht zu funktionieren?):
1 - 4 * 3 + 2
<math>\sqrt{1 - \cos^2 3.1414}</math>
...


Aufgabe 2[Bearbeiten]

  • Was sind Vor- und Nachteile der Infix- bzw. Präfixnotation und geben sie jeweils ein Beispiel an?
  • Welche Notation wird in Scheme verwendet


Aufgabe 3 - Rekursion[Bearbeiten]

  • Definieren sie eine Funktion, die die Länge einer Liste allgemein-rekursiv berechnet.
  • Definieren sie eine Funktion, die die Länge einer Liste endrekursiv berechnet.
  • Wo liegen die Unterschiede zwischen Endrekursiv und Allgemeinrekursiv und warum ist die Endrekursion besser?

...noch mehr glaub ich, Ideen?


Aufgabe 4 - Eigene Datenstruktur[Bearbeiten]

Diese Aufgabe findet sich in ähnlicher Form in den Klausurvorbereitungen mit dem Umrechnen von Längenangaben.

  • Definieren Sie eine Datenstruktur für Geldbeträge, so dass jeder Geldbetrag z.B. eine zweielementige Liste aus Betrag (Zahl) und Währung (Symbol) ist. Schreiben sie eine Funktion, die so einen Datensatz erzeugt:
(make-deposit 5 'Euro) -> (5 Euro)
  • Schreiben sie Zugriffsfunktionen auf den Wert und die Einheit
(amount-of x) -> 5
(currency-of x) -> Euro
  • Schreiben sie eine Funktion, die einen Geldbetrag mit einem gegebenen Faktor multipliziert.
(multiply-deposit x 3) -> 15 Euro
  • Gegeben ist eine Umrechnungstabelle mit Paaren in der Form:
(define *Kurse* '(
 ; Wert der Währung in Euro
 (0.15 . NOR)
 (0.71 . USD)
 (1.00 . Euro))
  • Schreiben sie eine Funktion, die einen Geldbetrag in Euro umgewandelt werden kann:
(deposit->Euro '(10 USD)) -> (7.10 Euro)
  • Schreiben sie eine Funktion deposit+ die zwei Geldbeträge addiert
(deposit+ '(10 USD) '(2.10 Euro)) -> (10 Euro)

Aufgabe 5 - Funktionen höherer Ordnung[Bearbeiten]

Funktionen höherer Ordnung - hier sollte man wo möglich apply, reduce, map, filter etc. pp. benutzen. Alles unter Zuhilfenahme der Funktionen, die man in der Aufgabe 4 geschrieben hat.

  • Die fiktive Problem-Person in der Aufgabe hat verschiedene Währungen in ihrer Kasse. Sie möchte wissen, wieviel die Beträge in Euro Wert sind. Schreiben sie eine Funktion, die eine Liste mit Währungen in Euro Umwandelt.
(Kasse->Euro '( (10 USD) (2.10 Euro))) -> ( (7.10 Euro) (2.10 Euro) )
  • Nun möchte der Typ wissen, wieviel Geld insgesammt in seiner Kasse vorhanden ist.
(betrag '( (10 USD) (2.10 Euro) )) -> (10 Euro)
  • Jetzt ist die Frage nach allen Beträgen in einer bestimmten Währung
(betragWährung '( (10 USD) (2.10 Euro) ) 'USD ) -> ((10 USD))
  • Jetzt ist die Frage nach der Summe des Betrags in einer bestimmten Währung in Euro.
(betragWährungSumme '( (10 USD) (2.10 Euro) ) 'USD ) -> (7.10 Euro)
  • Was ist eine Funktion höherer Ordnung?


Aufgabe 6 - CLOS[Bearbeiten]

  • Definieren Sie eine Klasse für Messgeräte, und eine dazugehörige generische Funktion messwert-auslesen. Definieren Sie weiterhin Klassen für:
    • Thermometer, die die Temperatur messen
    • Barometer, die den Luiftdruck messen
    • Regenmesser, die die Regenmenge messen
    • eine Wetterstation, die alles drei misst
  • Begründen Sie ihre Klassenhierarchie.
  • Beschreiben Sie das Konzept der Methodenpräzedenzlisten und begründen Sie, warum diese in CLOS nötig sind.
  • Beschreiben Sie die möglichen Methodenkombinationen, auch anhand des vorliegenden Beispiels (Messgeräte).


Aufgabe 7 - Prolog-in-Scheme[Bearbeiten]

Gegeben sind ein paar Relationen, etwa wie folgt:

  • (kamera kamera-id name hersteller zoom auflösung)
  • (anbieter anbieter-id name foo bar lieferzeit garantiedauer)
  • (angebot kamera-id anbieter-id preis)

sowie ein paar Beispieltupel mit etwa acht Angeboten für drei verscheidene Kamera und drei oder vier Hersteller, die alle untereinander durch die IDs verlinkt sind.

  • Stellen Sie geeignete Anfragen:
    • Preis einer Kamera mit 18-fachem Zoom
    • Namen der Anbieter die eine Kamera mit Irgendwas verkaufen.
    • Alle Kameras, die in max. einem Tag geliefert werden
  • Was muss man beachten, wenn man funktionale Sprachelemente in Prolog-Programmen verwendet?