Implementierung einer Funktion
Die Verarbeitung mit einer Funktionsdefinition festlegen und mit einem Funktionsaufruf aktivieren
Hier noch einmal die Formel für das Volumen einer quadratischen Pyramide mit einer vorgegebenen Länge der Grundseite und einer vorgegebenen Höhe:
$\begin{array}{lclcl} \text{Volumen} & = & \displaystyle\frac{1}{3} \cdot \text{Grundfläche} \cdot \text{Höhe} = & \displaystyle\frac{1}{3} \cdot \text{Länge} \cdot \text{Länge} \cdot \text{Höhe} \end{array}$
Die Funktion volumenPyramide
wird mit einer Funktionsdefinition festgelegt.
volumenPyramide laenge hoehe =
(1/3)*(laenge*laenge)*hoehe
Hier werden die Funktionsvariablen laenge
und hoehe
- man nennt sie Parameter - benutzt um übergebene Daten zu verwalten.
Die Verarbeitung der Daten wird mit Hilfe eines Ausdrucks beschrieben:
(1/3)*(laenge*laenge)*hoehe
Beachte, dass der Ausdruck entweder direkt hinter das Gleichheitszeichen geschrieben wird oder - wie oben zu sehen - eingerückt (in der Regel um 4 Einheiten) in der nächsten Zeile.
Eine solche Funktionsdefinition wird in der Regel in einer Datei abgespeichert, damit man sie zu einem späteren Zeitpunkt nochmal nutzen kann.
Die Funktion wird mit einem Funktionsaufruf aktiviert. Hierzu werden die Parameter mit den aktuellen Datenobjekten verknüpft.
Im vorliegenden Beispiel ist volumenPyramide 10 6
ein Funktionsaufruf, bei dem die Daten 10
(für die Funktionsvariable laenge
)
sowie 6
(für die Funktionsvariable hoehe
) übergeben werden.
Die Funktionsdefinition kann man zusammen mit Funktionsaufrufen in der REPL testen. Man gibt die Definition bzw. den Aufruf in die REPL ein. Elm liefert jeweils eine Rückmeldung.
> volumenPyramide laenge hoehe =
| (1/3)*(laenge*laenge)*hoehe
|
<function> : Float -> Float -> Float
> volumenPyramide 10 6
199.99999999999997 : Float
> volumenPyramide 230.3 145.6
2574115.3013333334 : Float
Beachte, dass Elm beim Funktionsaufruf volumenPyramide 10 6
nicht das erwartete Ergebnis 200
, sondern die
Zahl 199.99999999999997
liefert. Das liegt an Rundungen, die bei den Berechnungen vorgenommen werden (hier: 1/3
).
Aufgabe 1
Probiere das selbst aus. Nutze weitere Funktionsaufrufe, um die Volumina der Pyramiden von Gizeh mit Elm zu bestimmen.
Das Verhalten der Funktion beschreiben
Elm liefert zu einer Funktionsdefinition eine Rückmeldung.
> volumenPyramide laenge hoehe =
| (1/3)*(laenge*laenge)*hoehe
|
<function> : Float -> Float -> Float
Im vorliegenden Beispiel ist das die Typangabe <function> : Float -> Float -> Float
.
Elm hat erkannt, dass es sich um eine korrekte Funktionsdefinition mit folgendem Verhalten handelt:
Bei Übergabe eines Datenwerts vom Datentyp Float
und eines weiteren Datenwerts vom Datentyp Float
wird ein Datenwert vom Datentyp Float
als Funktionswert zurückgegeben.
Dass hier Zahlen vom Datentyp Float
verarbeitet werden hat Elm anhand des Divisionsoperators in der Funktionsdefinition erschlossen.
Wir nutzen eine solche Typangabe (man nennt sie auch Signatur der Funktion) zusammen mit Beispielen von Funktionsaufrufen, um das Verhalten einer Funktion zu beschreiben.
Signatur:
volumenPyramide: Float -> Float -> Float
Beispiele:
volumenPyramide 10.0 6.0 -> 200.0
...
Aufgabe 2
Ergänze die Verhaltensbeschreibung um zwei weitere Beispiele.
Aufgabe 3
Meist erstellt man eine Verhaltensbeschreibung für eine Funktion, bevor man die Funktion mit einer Funktionsdefinition implementiert. Erläutere die Vorteile dieser Vorgehensweise.