03.11.2012 Aufrufe

Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...

Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...

Informatik I - Institut für Informatik - Christian-Albrechts-Universität zu ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Zur Verdeutlichung der bisher <strong>zu</strong>gelassenen Form von Rechenvorschriften geben wir nachfolgend<br />

einige Beispiele an. Dabei zeigen wir auch, wie man rekursive Rechenvorschriften<br />

aus gegebenen Spezifikationen durch mathematische Überlegungen ” herrechnen“ kann.<br />

Auf die formale Semantik von Rechenvorschriften gehen wir jetzt noch nicht ein, sondern<br />

unterstellen ein intuitives termmäßiges Verständnis der Abarbeitung von Rekursion, wie<br />

es durch die beiden einführenden Beispiele 3.1.1 und 3.1.2 und ihre Übertragung nach ML<br />

motiviert wurde.<br />

3.3.2 Beispiele (<strong>für</strong> ML-Rechenvorschriften)<br />

a) Das Volumen eines Kegelstumpfs mit Höhe h, kleinem Radius r und großem<br />

Radius R berechnet sich nach der Formel<br />

V =<br />

π ∗ h<br />

3<br />

∗ (r 2 + r ∗ R + R 2 ).<br />

Aus dieser Formel bekommt man sofort eine nichtrekursive ML-Rechenvorschrift V<br />

<strong>zu</strong>r Berechnung des Volumens, die wie folgt aussieht:<br />

fun V (r : real, R : real, h : real) : real =<br />

1.0472 * h * (r * r + r * R + R * R);<br />

In dieser Rechenvorschrift stellt die im Rumpf verwendete Zahl 1.0472 eine Nähe-<br />

auf vier Stellen nach dem Dezimalpunkt dar.<br />

rung des Bruchs π<br />

3<br />

b) Die Fakultät n! einer natürlichen Zahl n ist definiert als n! := �n i=1 i. Die Zahl 1 ist<br />

neutral bezüglich der Multiplikation und damit per Definition gleich jedem Produkt<br />

mit leerer Indexmenge. Im Falle der Fakultät liefert dies die folgende Gleichung:<br />

0! =<br />

0�<br />

i = 1 (F1)<br />

i=1<br />

Nun sei n �= 0. Dann gilt, nach der induktiven Definition des Produktsymbols und<br />

der Definition der Fakultät, die nachfolgende rekursive Beziehung:<br />

n! =<br />

n� n−1 �<br />

i = n ∗ i = n ∗ (n − 1)! (F2)<br />

i=1<br />

i=1<br />

Aus den beiden Gleichungen (F1) und (F2) erhalten wir durch einen Übergang <strong>zu</strong>r<br />

Programmiersprache ML und unter Verwendung der Sorte int der ganzen Zahlen<br />

sofort die folgende ML-Rechenvorschrift:<br />

fun fac (n : int) : int =<br />

if n = 0 then 1<br />

else n * fac(n-1);<br />

Offensichtlich berechnet, eine naive Auswertung durch Termerset<strong>zu</strong>ng analog <strong>zu</strong> Beispiel<br />

3.1.1 vorausgesetzt, diese Rechenvorschrift <strong>für</strong> ein nichtnegatives Argument n<br />

62

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!