Rekursive Verarbeitung
Die Häufigkeit einer Note bestimmen
Wie oft kommt eine Note in einer Notenliste vor?
Es gibt keine vordefinierte Listenfunktion, mit der man diese Frage direkt bearbeiten kann.
Zur Klärung werden wir daher selbst eine geeignete Funktion entwickeln.
Hier eine Modellierung einer hierfür vorgesehenen Funktion anzahl
:
Signatur:
anzahl: Int -> List Int -> Int
Beispiele:
anzahl 7 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 2
anzahl 1 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0
Aufgabe 1
Zur Konzeption der Funktion anzahl
verwenden wir Rekursion.
Erkläre die folgenden Reduktionsregel
Rekursionsanfang:
anzahl 7 [] -> 0
Rekursionsschritt - Fall 1:
anzahl 7 [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0 + (anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12])
Rekursionsschritt - Fall 2:
anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 1 + (anzahl 7 [7,12,10,15,4,8,13,10,7,5,2,9,9,12])
Aufgabe 2
Bei der Implementierung der Reduktionsregeln zur Funktion anzahl
verwenden wir Mustervorgaben.
Erkläre alle Deitail der folgende Funktionsdefinition. Teste sie anschließend mit geeigneten Funktionsaufrufen.
module Notenliste exposing (..)
anzahl: Int -> List Int -> Int
anzahl element liste =
case liste of
[] ->
0
erstes :: restliste ->
(if element == erstes then 1 else 0) + anzahl element restliste
Die Häufigkeit mehrerer Note bestimmen
Wie oft kommt eine Note aus einem vorgegebenen Notenbereich in einer Notenliste vor?
Ziel ist es, die Berechnung mit einer hierfür geeigneten Funktion haeufigkeit
durchzuführen:
Signatur:
haeufigkeit: List Int -> List Int -> Int
Beispiele:
haeufigkeit [6,7,8] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 3
haeufigkeit [0] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] -> 0
Wir verwenden dabei eine vordefinierte Funktion, mit der man überprüfen kann, ob ein Datenwert in einer Liste als Element vorkommt.
> import Notenliste exposing (..)
> notenliste
[14,7,12,10,15,4,8,13,10,7,5,2,9,9,12]
: List Int
> List.member 7 notenliste
True : Bool
> List.member 6 notenliste
False : Bool
Aufgabe 3
Entwickle eine Funktionsdefinition für die Funktion haeufigkeit
.
Du kannst diese Funktion analog zur Funktion anzahl
implementieren.
Eine Häufigkeitsverteilung bestimmen
Meist will man eine Übersicht erstellen, aus der hervorgeht, wie oft welche Note in der Notenliste vorkommt.
Ziel ist es, die Bestimmung einer solchen Übersicht mit einer Funktion verteilung
durchzuführen:
Signatur:
verteilung: List Int -> List Int -> List ( Int, Int )
Beispiele:
> verteilung [15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] [14,7,12,10,15,4,8,13,10,7,5,2,9,9,12] ->
[(15,1),(14,1),(13,1),(12,2),(11,0),(10,2),(9,2),(8,1),(7,2),(6,0),(5,1),(4,1),(3,0),(2,1),(1,0),(0,0)]
Aufgabe 4
Entwickle eine Funktionsdefinition für die Funktion verteilung
.