• Keine Ergebnisse gefunden

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen

N/A
N/A
Protected

Academic year: 2022

Aktie "Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

3. ¨Ubungsblatt

Typ-basiertes Programmieren und Schließen in Funktionalen Sprachen

Jun.-Prof. Dr. Janis Voigtl¨ ander / Dipl.-Math. Daniel Seidel Wintersemester 2009/10

Aufgabe 13

Leiten Sie (per Hand) das freie Theorem f¨ur den Typ

∀b.(b →Maybe (τ1,b))→b →τ2

her. Es seien τ1 und τ2 feste Typen. 3

Aufgabe 14

Versuchen Sie, folgende Programmfragmente mittels foldr-fusion und/oder shortcut deforestation zu optimieren:

• reverse ◦map h

• map h ◦reverse

• reverse ◦reverse

Welche Auswirkung hat die Implementierungsvariante des reverse (effizient,

ineffizient)? 3

Aufgabe 15

Diskutieren Sie in der Typsignatur begr¨undete Unterschiede m¨oglicher Funk- tionen folgender Typen.

• nullTest :: [a]→Bool vs.nullTest0:: (∀a.[a])→Bool

• toEmptyList ::Int →[a] vs.toEmptyList0::Int →(∀a.[a])

• toList ::a → [a] vs. toList0 ::a → (∀ a.[a]) vs. toList00 :: (∀ a.a) →

[a] 3

1

(2)

Aufgabe 16

Stellen Sie filter mittelsunfoldr dar. 3

Aufgabe 17

Stellen Sie foldr mittels destroy dar. 3

Aufgabe 18

Beweisen Sie die Korrektheit der destroy/unfoldr-Regel. 3

Aufgabe 19

Optimieren Sie das Beispielzip (fromTo 1 10) (fromTo ’a’ ’j’) aus der Vor- lesung weiter. Versuchen Sie, ein Programm ohne Zwischendatenstrukturen

und Maybe-Konstrukte zu erhalten. 3

2

Referenzen

ÄHNLICHE DOKUMENTE

readFile :: FilePath -> IO String Mehr Operationen im Modul IO der Standardb¨ ucherei. Buffered/Unbuffered,

Abstrakte Datentypen Signaturen & Axiome Korrektheit von Programmen Zustand und Aktionen. Teil III: Beispiele,

isDoesNotExistError :: IOError -> Bool isIllegalOperation :: IOError -> Bool isPermissionError :: IOError -> Bool isUserError :: IOError -> Bool ioeGetErrorString ::

Typ-basiertes Programmieren und Schließen in Funktionalen

Jede Liste wird intern durch eine leere Liste abgeschlossen. Jede Liste wird intern durch Jede Liste wird intern durch eine leere

Versuchen Sie, die relationale Typinterpretation so zu erweitern, dass sie das Beispiel flat (incr t ) = map (+1) (flat t ) aus der Vorlesung mittels eines. freien Theorems beweisen

Beweisen Sie die Korrektheit der destroy / unfoldr -Regel. Versuchen Sie, ein Programm

Typ-basiertes Programmieren und Schließen in Funktionalen