Von Fröschen und Tischlampen
Inhaltsverzeichnis |
Der Lampen-Stream
Zunächst definieren wir den Stream (abzählbar) unendlich vieler Tischlampen, die alle ausgeschaltet sind.
Jede Lampe ist mit einem Schalter ausgestattet, mit dem die Lampe entsprechend ihres Betriebszustandes entweder ein- oder ausgeschaltet werden kann:
<eval id="4b52203279c19"> (show-stream lamp-stream 18) </eval>
Frosch-Sprünge mit verschiedenen Weiten
Um jede n-te Lampe schalten zu können, erweitern wir die Stream-Sprachelemente mit der Prozedur stream-map-n.
In Analogie zu stream-map bewirkt stream-map-n eine Prozeduranwendung auf jedes n-te Element eines Streams:
Nun können wir Frosch-Sprünge mit aufsteigenden Sprungweiten definieren:
Unendlich viele Frösche springen über unendlich viele Tischlampen
<eval id="4b52259a80ac2"> (show-stream frog-lamp-stream 18) </eval>
Auswertung
Um das Resultat besser verallgemeinern zu können, fassen wir die Nummern der Lampen zusammen, die nach allen Frosch-Sprüngen eingeschaltet sind. In der Vermutung, dass das (abzählbar) unendlich viele Lampen sind, soll dieses Ergebnis wiederum als Stream repräsentiert werden:
<eval id="4b52259a81a5e"> (show-stream (result-stream frog-lamp-stream) 18) </eval>
Ergebnis: Offensichtlich sind nach den Frosch-Sprüngen alle Lampen eingeschaltet, deren Nummern Quadratzahlen sind.
Zurück zu Streams.