Übungen
Aufgabe 1
Gegeben ist eine Typdefinition für Himmelsrichtungen. Ergänze die Funktionsdefinitionen und teste die Funktionsaufrufe.
module Typdefinition exposing (..)
type Richtung
= N
| O
| S
| W
drehen: Richtung -> Richtung
drehen richtung =
-- im Uhrzeigersinn drehen
case richtung of
N -> ...
umwandlung: Richtung -> String
umwandlung richtung =
case richtung of
N -> "Norden"
...
Aufgabe
Beim Münzwurf gibt es nur die beiden Ergebnisse "Kopf" und "Zahl".
(a) Entwickle einen geeigneten Datentyp für die Ergebnisse eines Münzwurfs (mit type
) sowie für eine Serie von Münzwürfen (mit type alias
).
(b) Entwickle eine Funktion, die zurückliefert, wie oft "Kopf" in einer Wurfserie vorkommt.
> import Typdefinition exposing (..)
> anzahlKopf [Kopf,Zahl,Zahl]
1 : Int
Aufgaben zum Interpreter
Um die folgenden Aufgaben lösen zu könnten, musst du das Interpreter-Beispiel bearbeitet haben.
Aufgabe
Gegeben ist eine Typdefinition für Bewegungsbefehle. Ergänze die Funktionsdefinitionen und teste den Funktionsaufruf.
module Typdefinition exposing (..)
type Befehl
= LI -- links
| RE -- rechts
| VW Int -- vorwärts ...
type alias Programm = List Befehl
programm1: Programm
programm1 = [VW 2, RE, VW 4, LI, VW 2]
anzahlDrehBefehle: Programm -> Int
anzahlDrehBefehle programm =
case programm of
[] -> ...
b::rListe ->
case b of
LI -> ...
RE -> ...
VW x -> ...
> import Typdefinition exposing (..)
> anzahlDrehBefehle [RE,VW 1,LI,VW 2,LI,LI]
4 : Int
Aufgabe (schwierig)
Gegeben sind eine Typdefinition für Bewegungsbefehle und zwei (teils unvollständige) Funktionsdefinitionen.
module Typdefinition exposing (..)
type Befehl
= VW Int -- vorwärts ...
| LI -- links
| RE -- rechts
| WH Int (List Befehl) -- wiederhole ...
anzahlDrehungen: Befehl -> Int
anzahlDrehungen befehl =
case befehl of
LI -> 1
RE -> 1
VW x -> 0
WH n befehle -> n * (List.map anzahlDrehungen befehle |> List.foldr (+) 0)
wegLaenge: Befehl -> Int
wegLaenge befehl =
...
> import Typdefinition exposing (..)
> anzahlDrehungen (WH 2 [VW 3,WH 4 [VW 2,RE]])
8 : Int
> wegLaenge (WH 2 [VW 3,WH 4 [VW 1,RE]])
14 : Int
(a) Erkläre alle Details der Funktionsdefinition für die Funktion anzahlDrehungen
.
(b) Entwickle analog eine Funktionsdefinition für die Funktion wegLaenge
.