• Keine Ergebnisse gefunden

(a) Implementieren Sie die Funktion s t r i n g T o I n t

N/A
N/A
Protected

Academic year: 2021

Aktie "(a) Implementieren Sie die Funktion s t r i n g T o I n t"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨at Siegen

Lehrstuhl Theoretische Informatik Carl Philipp Reh

Funktionales Programmieren SS 2020

Ubungsblatt 3¨

Aufgabe 1. Betrachten Sie folgende data-Deklaration:

data E r r o r e a = Fail [ e ] | Ok a

Im Vergleich zu M a y b e benutzen wir hier Fail [ e ] statt N o t h i n g. Die Idee ist, dass [ e ] eine Liste von aufgetretenen Fehlern enth¨alt.

(a) Implementieren Sie die Funktion

s t r i n g T o I n t :: S t r i n g -> E r r o r S t r i n g Int

Diese soll im Fall, dass ein S t r i n g nicht in einen Int konvertieren werden kann, eine geeignete Fehlermeldung als S t r i n g liefern. Zum Konvertieren eines S t r i n g in einen Int onnen Sie die Funktion r e a d M a y b e :: S t r i n g -> M a y b e Int

aus dem Modul Text . Read benutzen. Schreiben Sie hierzu i m p o r t Text . Read ( r e a d M a y b e )

an den Anfang Ihrer Datei.

(b) Implementieren Sie F u n c t o r ur E r r o r e.

(c) Implementieren Sie A p p l i c a t i v e ur E r r o r e. Hierbei sollen alle aufgetretenen Fehler akkumuliert werden. D.h., es soll gelten, dass ( Fail x ) <* > ( Fail y ) = Fail ( x ++ y )

Aufgabe 2. Bei A p p l i c a t i v e hat man die Wahl, <* > oder l i f t A 2 zu implementieren.

(a) Implementieren Sie <* > ¨uber l i f t A 2, was wir a p p l y nennen:

a p p l y :: A p p l i c a t i v e f = >

f ( a -> b ) -> f a -> f b Hinweis: Sie m¨ussen vorher l i f t A 2 importieren:

i m p o r t C o n t r o l . A p p l i c a t i v e ( l i f t A 2 )

1

(2)

(b) Implementieren Sie l i f t A 2 ¨uber <* >, was wir liftA2 ’ nennen:

liftA2 ’ :: A p p l i c a t i v e f = >

( a -> b -> c ) -> f a -> f b -> f c

Hinweis: Sie m¨ussen fmap verwenden.

Aufgabe 3. Man k¨onnte M o n a d auch ¨uber join statt ¨uber > >= imple- mentieren, was allerdings in Haskell nicht vorgesehen ist.

(a) Implementieren Sie join ¨uber > >=, was wir join ’ nennen:

join ’ :: M o n a d m = > m ( m a ) -> m a

(b) Implementieren Sie > >= ¨uber join, was wir bind nennen:

bind :: M o n a d m = > m a -> ( a -> m b ) -> m b Hinweis: Sie m¨ussen vorher join importieren:

i m p o r t C o n t r o l . M o n a d ( join )

Sie m¨ussen außerdem fmap verwenden.

Aufgabe 4. Betrachten Sie folgende Data-Deklaration:

data Log a = M k L o g a [ S t r i n g ]

Die Idee von Log ist, dass man neben einem Wert vom Typ a auch noch eine Liste von Log-Meldungen berechnet.

(a) Implementieren Sie F u n c t o r ur Log.

(b) Implementieren Sie A p p l i c a t i v e ur Log. Achten Sie darauf, dass Sie Log-Meldungen akkumulieren m¨ussen.

(c) Implementieren Sie M o n a d ur Log. Achten Sie darauf, dass Sie Log- Meldungen akkumulieren m¨ussen.

2

Referenzen

ÄHNLICHE DOKUMENTE

The results from the classification for all investigated areas in Åre, show that two gullies, but no slope, were found to have an urgent need for detailed investigation, The

Daneben wurden in den letzten Jahren eine Reihe von Maßnahmen getroffen, um die Wald- Wild-Situation im Bergwald zu entspannen: So wurden zur Verbesserung der

Structural measures such as dams may have a crucial role in flood impacts control as Golestan dam did in case of occurrence of floods in August 2001 and 2002 in the study area

Während die Fließgeschwindigkeit in der Fläche unter Einbezug der Rauhigkeit, Neigungsverhältnisse, Hanglänge und der Gerinnenähe gutachterlich geschätzt werden muss

Um die langfristige Wirksamkeit des Lebendverbaus besser einschätzen zu können, beschäftigt sich der Arbeitsbereich Ingenieurbiologie und Landschaftsbau (Universität für

Herein, simulated front velocities and flow areas are compared with the field data, allowing us to constrain appropriate model parameters; video analysis of large boulder motion

Such bar forms are mainly observed and described for gravel-bed streams where riffle-pool sequences (mesoscale) are superposed by alternate bar structures (macroscale).. Riffles

About 45% of the total forest area was in a so-called ageing phase (Fig. 5), which was amongst others indicated by a low tree density of 290 trees per hectare. At first sight