Diskussion:Verzögerte Evaluation und Streams
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
== Sprachelemente ==
Ergänzung und Korrektur in der Tabelle zu den stream-Sprachelementen:
<table border="1" cellspacing="1" cellpadding="4">
<tr>
<th>Prozedur</th><th>Parameter</th><th>Beschreibung</th>
</tr>
<tr>
<td><tt>stream-cdr</tt></td><td><tt>stream</tt></td><td>analog zu <tt>cdr</tt></td>
</tr>
<tr>
<td><tt>stream-cons</tt></td><td><tt>item stream</tt></td><td>analog zu <tt>cons</tt></td>
</tr>
</table>
== Grenzwert ==
Vorschlag zur Aufgabenstellung <tt>Grenzwert</tt>:
Schreiben Sie eine Prozedur <tt>grenzwert</tt>, die den Grenzwert einer Zahlenfolge bestimmt. Diese soll den Grenzwert <math>g</math> einer als Stream repräsentierten Zahlenfolge <tt>stm</tt> zurückgeben, wenn ab einem gewissen Index <math>i</math> sämtliche Folgenglieder in einer hinreichend kleinen <math>\varepsilon</math>-Umgebung (<tt>eps</tt>) von <math>g</math> liegen. Falls <tt>min</tt> Folgenglieder in dieser <math>\varepsilon</math>-Umgebung liegen, wird Konvergenz vermutet und das <math>i</math>-te Folgenglied zurückgegeben. Ist das nicht der Fall, wird die Suche nach <tt>max</tt> Folgengliedern abgebrochen unf <tt>#f</tt> zurückgegeben.
Lösungsvorschlag:
(define grenzwert
(lambda (stm eps min max)
(cond
[(< max 0) #f]
[(< min 0) (stream-car stm)]
[(< (abs (- (stream-car stm) (stream-car (stream-cdr stm)))) eps)
(grenzwert (stream-cdr stm) eps (- min 1) (- max 1))]
[else
(grenzwert (stream-cdr stm) eps min (- max 1))])))