Ü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.