Читать книгу Algorithmen und Datenstrukturen - Gunter Saake - Страница 69
Beispiel 3.3 Erweiterte Funktionsdefinition
ОглавлениеAls Beispiel für eine derartig erweiterte Funktionsdefinition betrachten wird die folgenden vier Definitionen:
| f(x, y) | = | if g(x, y) then h(x + y) else h(x − y) fi |
| g(x, y) | = | (x = y) ∨ odd(y) |
| h(x) | = | j(x + 1) · j(x − 1) |
| j(x) | = | 2x − 3 |
Die Funktion h ruft die Funktion j zweimal auf. Ein Beispiel für die Auswertung derartiger erweiterter Terme zeigt der Aufruf f (1, 2):
| f(1, 2) | if g(1, 2) then h(1 + 2) else h(1 − 2) fi | |
| if 1 = 2 ∨ odd(2) then h(1 + 2) else h(1 − 2) fi | ||
| if 1 = 2 ∨ false then h(1 + 2) else h(1 − 2) fi | ||
| if false ∨ false then h(1 + 2) else h(1 − 2) fi | ||
| if false then h(1 + 2) else h(1 − 2) fi | ||
| h(1 − 2) | ||
| h(−1) | ||
| j(−1 + 1) · j(−1− 1) | ||
| j(0) · j(−1− 1) | ||
| j(0) · j(−2) | ||
| (2 · 0− 3) · j(−2) | ||
| * | (−3) · (−7) | |
| 21 |
Die Auswertung erfolgt dadurch, dass jeweils ein Funktionsaufruf durch den ihn definierenden Term ersetzt wird.
Mit der abkürzenden Notation * bezeichnen wir die konsekutive Ausführung mehrerer elementarer Termauswertungsschritte.
Eine Funktionsdefinition f heißt rekursiv, wenn direkt (oder indirekt über andere Funktionen) ein Funktionsaufruf f(..) in ihrer Definition auftritt.