i

Übungen

Aufgabe 1

Im folgenden REPL-Dialog fehlen die Ergebnisse.

> liste = [1,2,3]
...
> 0 :: liste
...
> 0 :: 0 :: liste
...
> [0] ++ liste
...
> liste ++ [0]
...

(a) Stelle Vermutungen auf, was an Stelle der drei Punkte jeweils erscheint. Überprüfe, indem du den Dialog selbst führst.

(b) Der Dialog verdeutlicht auch, dass die beiden Funktionen :: und ++ jeweils neue Listen erzeugen. Woran erkennt man das hier? Erläutere.

Aufgabe 2

Hier werden vordefinierte Listenfunktionen benutzt. Informiere dich vorab auf Elm - List, was die Funktionen leisten. Führe anschließend den folgenden REPL-Dialog aus und erkläre die Ergebnisse.

> List.range 1 10
...
> List.sum (List.range 0 20)
...
> List.repeat 3 'o'
...
> List.reverse (List.sort ['e','u','a','i','o'])
...
> (List.range 2 4) :: (List.range 6 8) :: []              
...
> List.concat ((List.range 2 4) :: (List.range 6 8) :: [])
...

Hinweis: Man muss nicht alle diese vordefinierten Funktionen aktiv kennen. Man schlägt sie bei Bedarf in einer Dokumentation nach.

Aufgabe 3

(a) Im Folgenden sollen Funktionen zu Listen von geraden Zahlen geschrieben werden. Dazu benötigst du eine Funktion, die überprüft, ob eine Zahl eine gerade Zahl ist. Schreibe die Funktion gemäß folgender Signatur:

geradeZahl : Int -> Bool
geradeZahl n =
    ...

(b) Schreibe eine Funktion, die eine Liste aller geraden Zahlen bis n zurückgibt und sich folgendermaßen aufrufen lässt:

> geradeZahlen 6
[0,2,4,6] : List Int
> geradeZahlen 11
[0,2,4,6,8,10] : List Int

(c) Schreibe eine Funktion, die überprüft, ob eine Liste nur gerade Zahlen enthält. Nutze dazu die Dokumentation des Listen-Moduls. Die Anwendung in der REPL kann folgendermaßen aussehen:

> nurGeradeZahlen [ 1, 3, 4, 7, 8 ]
False : Bool
> nurGeradeZahlen [ 2, 6, 8, 14, 28 ]
True : Bool

(d) Schreibe analoge Funktionen für Vielfache von n. Deren Anwendung ergibt z.B.:

> vielfacheVon 3 20
[0,3,6,9,12,15,18]
    : List Int
> vielfacheVon 5 20
[0,5,10,15,20] : List Int

und

> nurVielfacheVon 3 [2, 6, 12]
False : Bool
> nurVielfacheVon 3 [3, 6, 12]
True : Bool

Aufgabe 4

(a) Schreibe eine Funktion, die überprüft, ob ein Zeichen ein Vokal ist. Berücksichtige dabei nur Großbuchstaben. Die Signatur der Funktion lautet:

istVokal : Char -> Bool

(b) Schreibe eine Funktion, welche die Zahl der Vokale einer Zeichenkette ermittel. Ein Aufruf sieht dann beispielsweise so aus:

> zaehleVokale "HALLO"
2 : Int

(c) Schreibe eine analoge Funktion für beliebige, einzelne Zeichen. Deren Anwendung ergibt z.B.:

> zaehleZeichen 'H' "HALLO"
1 : Int
> zaehleZeichen 'L' "HALLO"
2 : Int

Aufgabe 5

Die Ergebnisse von Lottoziehungen werden mit Hilfe von Listen verwaltet.

lottoziehungen : List (List Int)
lottoziehungen =
    [ [ 3, 6, 13, 23, 40, 41 ]
    , [ 5, 6, 20, 25, 44, 49 ]
    , [ 10, 21, 22, 23, 39, 41 ]
    , [ 1, 11, 17, 45, 47, 48 ]
    ]

Entwickle eine Funktion, mit der man die relative Häufigkeit einer Zahl ermitteln kann:

haeufigkeit : Int -> List (List Int) -> Float
haeufigkeit zahl ziehungen =
    ...

Der Aufruf ergibt in diesem Fall z.B.:

> haeufigkeit 5 lottoziehungen
0.25 : Float
> haeufigkeit 6 lottoziehungen
0.5 : Float

Suche

v
8.2.2.3.3
inf-schule.de/deklarativ/fp_elm/elm_programme/listen/uebungen
inf-schule.de/8.2.2.3.3
inf-schule.de/@/page/5iIAZ435axnadanr

Rückmeldung geben