TU Wien:Funktionale Programmierung VU (Knoop)/Prüfung 2008-03-10

Aus VoWi
Zur Navigation springen Zur Suche springen

Insgesammt gab es auf eine Pruefung 50 Punkte.

Gruppe D[Bearbeiten | Quelltext bearbeiten]

Die Fragen sind nicht im Wortlaut wiedergegeben, die Aufgaben prinzipiell sollten aber korrekt sein.

Aufgabe 1 (6 Punkte)[Bearbeiten | Quelltext bearbeiten]

a) (4 Punkte)
Implementiere eine rekursive Funktion minElem, die das kleinste Element einer nicht leeren Liste zurückliefert.
minelement :: [Int] -> Int
minelement(x:xs) 
  | length(xs)==0 = x 
  | x > minelement(xs) = minelement(xs)
  | otherwise = x

eine generische, schlicht rekursive alternative ( statt kaskadenartig)

mini:: Ord a => [a] -> a
mini l@(x:xs) 
  | length xs == 0 = x
  | otherwise = mini ( sort(nub (fst (partition (<=x) l ) ) ) )
b) (1 Punkt)
Welchen Rekursionstyp haben Sie in der von Ihnen implementierten Methode angewandt.
c) (1 Punkt)
Was passiert wenn eine leere Liste Eingegeben wird.

Aufgabe 2 (6 Punkte)[Bearbeiten | Quelltext bearbeiten]

Transparente Funktion ist eine Funktion, bei der man an ihrem Effekt erkennt, ob es sich um eine Fehlerausgabe handelt.

a) (4 Punkte)
Implementiere eine transparente Funktion f, die herausfindet ob das erste Element einer nicht leeren Liste sich mindestens zweimal in der Liste befindet.
b) (1 Punkt)
Wieso ist ihre Funktion f transparent?
c) (1 Punkt)
Was passiert, wenn eine leere Liste eingegeben wird?

Aufgabe 3 (5 Punkte)[Bearbeiten | Quelltext bearbeiten]

f m n = (*) m n
a) (4 Punkte)
Geben Sie die Typsignatur von f an. Sie sollte möglichst allgemein sein.
f::( Num a ) => a -> a -> a
b) (1 Punkt)
Beschreiben Sie die einzelnen Teile der Typsignatur.
( Num a ) =>

Typspezifikation: a muss typ Num genügen

a -> a

zwei Eingabeparameter vom typ a

-> a

Resultat ist vom typ a

Aufgabe 4 (5 Punkte)[Bearbeiten | Quelltext bearbeiten]

f g s [] = s
f g s (x:xs) = f g (g s x) xs
a) (4 Punkte)
Geben Sie die Typsignatur von f an.
f :: (a -> b -> a) -> a -> [b] -> a
b) (1 Punkt)
Schreiben Sie ein Beispiel für den Funktionsaufruf.

die Funktion beschreibt foldl

f (+) 0 [1,2,3] = 6

Aufgabe 5 (9 Punkte)[Bearbeiten | Quelltext bearbeiten]

a)    Add     b)    Mult
      / \           / \
     7   4         3  Sub
                      / \
                     7   4

a) (6 Punkte)
Definieren Sie einen Algebraischen Datentyp Expr der die obigen Ausdrucksbäume als Werte des Datentyps beinhaltet.
b) (1 Punkt)
Wo genau befinden sich die Ausdrucksbäume in dem Datentyp.
c) (2 Punkte)
Welche Variante des Algebraischen Typs haben Sie im a) benutzt.

Aufgabe 6 (8 Punkte)[Bearbeiten | Quelltext bearbeiten]

(x.y.y) ((z.z z)(z.z z))

a) (4 Punkte)
3 Schritte oder bis die Normalform erreicht wurde mit: leftmost-innermost.
b) (4 Punkte)
3 Schritte oder bis die Normalform erreicht wurde mit: leftmost-outermost.

Aufgabe 7 (3 Punkte)[Bearbeiten | Quelltext bearbeiten]

fac n = fac (n-1) * n
fac 0 = 1
Berechnet es die Fakultät einer ganzzahligen Eingabe? (fac soll die Fakultätsfunktion sein)

nicht in dieser definitionsreihenfolge, da das obere (allgemeinere) pattern das untere überlädt. in der jetzigen form ist es eine endlosrekursion. richtig wäre:

fac 0 = 1
fac n = fac (n-1) * n

Aufgabe 8 (8 Punkte)[Bearbeiten | Quelltext bearbeiten]

a) (4 Punkte)
Was versteht man unter dem Begriff "first-class citizen" in der Funktionalen Programmierung.
b) (4 Punkte)
Hat es irgendwo Grenzen?

Thread im Informatik Forum[Bearbeiten | Quelltext bearbeiten]

[1]