Streams

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Potenziell unendliche Mengen

Mengen, die sich eindeutig auf die Menge der natürlichen Zahlen abbilden lassen, heißen abzählbar oder potenziell unendliche Mengen.
Mit dem Konzept der verzögerten Evaluation wollen wir diese "Unendlichkeit" im Computer repräsentieren.
Wir definieren dazu Streams, d.h. unendliche Datenströme:

Streams haben also in Scheme die folgende Struktur:

stream = (kopfglied . reststream)

Dabei sind:

kopfglieddas erste Glied des Streams
reststreamder Reststream, dessen Evaluation "aufgeschoben" wird

Nun können wir unseren ersten Datenstrom implementieren.
Naturgemäß soll das die potenziell unendliche Menge der natürlichen Zahlen sein:

Sprachelemente

Zur Arbeit mit Streams benötigen wir die folgenden Sprachelemente:

 SyntaxSemantik
Selektoren stream-cargibt das Kopfglied zurück
stream-cdrgibt den Reststream zurück
Konstruktor stream-conserzeugt aus Kopfglied und Reststream einen Stream
Prädikat stream?gibt #t zurück, wenn das Argument ein Stream ist, anderenfalls #f
Operatoren stream-map wendet eine Prozedur auf die Glieder eines Streams an und gibt das Resultat als Stream zurück
stream-filter filtert mit einem Prädikat Glieder eines Streams heraus und gibt diese in einem Stream zurück
Ausgabe show-streamgibt die Elemente eines Streams in einer beliebigen Anzahl auf dem Bildschirm aus

Die meisten dieser Sprachelemente haben wir oben bereits definiert.
Implementieren Sie die Prozedur stream-filter.

 

Quelltext überprüfen:

Aufgaben

  1. Gegeben sind die Definitionen:

    Definieren Sie mit dem Prädikat gerade? den Streams aller geraden Zahlen.

    Implementieren Sie nun den Stream aller ungeraden Zahlen mit der Prozedur ungerade.

  2. Wir kennen bereits einen effizienten Primzahlprüfer:

    Definieren Sie den Stream unendlich vieler(!) Primzahlen.

Zum Weiterarbeiten

FroschLampe.jpg

Von Fröschen und Tischlampen

In einer Reihe stehen (abzählbar) unendlich viele Tischlampen. Jede besitzt in ihrer Bodenplatte einen Schalter, der auf "AUS" steht.
Vor der ersten Lampe sitzen (abzählbar) unendlich viele Frösche.
Sie springen nun von Lampenschalter zu Lampenschalter nach folgendem Prinzip:
Der erste Frosch springt auf jeden Schalter. Der zweite Frosch springt auf jeden zweiten Schalter, der dritte auf jeden dritten Schalter usw.
Bei jeder Schalterberührung wird die Lampe entsprechend ihres Zustandes entweder ein- oder ausgeschaltet.
In welchem Zustand befinden sich die Tischlampen, wenn unendlich viele Frösche über unendlich viele Tischlampen gesprungen sind?

Zur Problemlösung.

Persönliche Werkzeuge