Streams
Aus ProgrammingWiki
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:
kopfglied | das erste Glied des Streams |
reststream | der 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:
Syntax | Semantik | |
Selektoren | stream-car | gibt das Kopfglied zurück |
stream-cdr | gibt den Reststream zurück | |
Konstruktor | stream-cons | erzeugt 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-stream | gibt 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
-
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.
-
Wir kennen bereits einen effizienten Primzahlprüfer:
Definieren Sie den Stream unendlich vieler(!) Primzahlen.
Zum Weiterarbeiten
Von Fröschen und TischlampenIn einer Reihe stehen (abzählbar) unendlich viele Tischlampen. Jede besitzt in ihrer Bodenplatte einen Schalter, der auf "AUS" steht. Zur Problemlösung. |