Von Fröschen und Tischlampen
Aus ProgrammingWiki
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:
Frosch-Sprünge mit verschiedenen Weiten
Um jede n-te Lampe schalten zu können, erweitern wir die Stream-Sprachelemente mit der Prozedur höherer Ordnung(stream-map-n <n>).
In Analogie zu stream-map bewirkt ein Aufruf von (stream-map-n <n>) die Anwendung einer Prozedur proz auf jedes n-te Element eines Streams stm:
In folgendem Beispiel wird jede dritte Lampe eingeschaltet...
... bzw. ein- und wieder ausgeschaltet:
Nun können wir Frosch-Sprünge mit aufsteigenden Sprungweiten definieren:
Unendlich viele Frösche springen über unendlich viele Tischlampen
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:
Ergebnis: Offensichtlich sind nach den Frosch-Sprüngen alle Lampen eingeschaltet, deren Nummern Quadratzahlen sind.
Zurück zu Streams.