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

From VoWi
Jump to navigation Jump to search

Insgesammt gab es auf eine Pruefung 50 Punkte.

Gruppe D[edit | edit source]

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

Aufgabe 1 (6 Punkte)[edit | edit source]

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)[edit | edit source]

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)[edit | edit source]

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)[edit | edit source]

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)[edit | edit source]

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)[edit | edit source]

(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)[edit | edit source]

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)[edit | edit source]

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[edit | edit source]

[1]