i

Ü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önnen, 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.

Suche

v
8.2.2.8.3
www.inf-schule.de/deklarativ/fp_elm/elm_programme/typdefinition/uebungen
www.inf-schule.de/8.2.2.8.3
www.inf-schule.de/@/page/MTcZpnGA6sjGel6h

Rückmeldung geben