Funktionale Programmierung –¨Ubungsblatt IV

Werbung
Funktionale Programmierung – Übungsblatt IV
Jörg Kreiker
14. November 2011
Aufgabe IV.1: Musterabgleich
Welche Bindungen werden jeweils erzeugt? Zu was werten die Ausdrücke aus?
1. f (x:xs) (y:ys) = x+y : f xs ys
f [1] [2]
2. 1:2:[3] = [1,2] in [1,2,3]
3. 1:3:[2] = [1,2] in [1,2,3]
4. [A x | A x <- [A 1, B 1, A 2, B 2]]
5. [x | (x:xs) <- [ [], [2], [], [4,5] ] ]
f s@(x:xs) = x:s
6. case e of
l@(x:xs) -> if x==0 then xs else l
7. (\~[x] -> 0) []
8. (\~[x] -> x) []
9. (\~[x, ~(a,b)] -> x) [(0,1), ⊥]
10. (\~[x, (a,b)] -> x) [(0,1), ⊥]
11. data F = F Bool
• (\(F True) -> True) ⊥
• (\~(F True) -> True) ⊥
• ( (F 1) -> True) undefined
• case F ⊥ of F
-> 1
12. let [xs, [x]] = xs :[[x]] in 1
13. let ([x] : xs) : ys = [x] : ([xs] ++ ys) in 1
14. let (x:xs) : ys = ([x] ++ xs) : ys in 1
15. let (xs : ys) : zs = xs ++ (ys : zs) in 1
16. data F1 = F1 Int und data F2 = F2 !Int
• x = case F1 ⊥ of F1
-> 1
• x = case F2 ⊥ of F2
-> 1
• y = case ⊥ of F1
-> 1
• y = case ⊥ of F2
-> 1
• x:: Int
x = ⊥
x1 = case x of
-> 1
Aufgabe IV.2: Kinds
Bestimmt jeweils den kind der folgenden Typausdrücke. Gebt für Typausdrücke vom kind ∗
jeweils einen Wert dieses Typs an.
1. data T x = Nil | B (T x) (T x)
2. type N = T Char
3. type N = []
4. data M x y = M x
5. data M x = M x
6. data M x y = M x y
7. data M x = M (x Int)
8. data M z x y = S (z x) (z y)
9. data M x = I (x (M x))
10. data N s = Nil | S s
11. type N1 = M N (most recent M and N)
12. data T x y z = K (x -> y (z,x))
13. data T x = T (x (T x))
Aufgabe IV.3: Rösselsprung
Eine Springertour ist eine Menge von Zügen der Schachfigur Springer (Pferd), so dass die Figur
alle Felder eines Schachbretts genau einmal besucht. Die Tour heißt geschlossen, wenn das letzte
Feld das Ausgangsfeld bedroht. Implementiert eine Funktion in Haskell, die für ein Ausgangsfeld
eines n × n Schachfelds eine geschlossene Springertour liefert (falls möglich).
Herunterladen