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

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

Aufgabe 1 (6 Punkte)

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)

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)

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)

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)

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)

(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)

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)

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

[1]