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>element 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 und <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))])))