streams im Schläger
Kann mir jemand helfen, besser zu verstehen, wie zu schreiben, ein stream???
Ich verstehe, dass ein stream ist eine unendliche Sequenz von Werten, und die Art, wie ich gelernt haben, Programmieren Sie eine Vertretung als das gedacht, dass beim Aufruf erzeugt ein paar (1) das erste element in der Sequenz und (2) einen thunk, das entspricht dem Strom für die zweite-durch-infinity-Elemente
Beispiel:
(define powers-of-two
(letrec ([f (lambda (x) (cons x (lambda () (f (* x 2)))))])
(lambda () (f 2))))
Verstehe ich hier, dass es nur der Herstellung einer Potenz von zwei und für den Zugriff auf diese für Beispiel den Aufruf (car (powers-of-two))
führen würde 2
und ruft (car ((cdr (powers-of-two))))
führen würde 4
Nun bin ich zu schreiben versucht, einen stream namens red-blue
wechselt zwischen strings red
und blue
aber ich bin ein wenig verwirrt darüber, wie zu bauen es
- so hast du es geschafft, herzlichen Glückwunsch! Check-out die Regelung in Abschnitt c2.com/cgi/wiki?SieveOfEratosthenesInManyProgrammingLanguages für ein Beispiel SICP-Stil-streams. Es gibt nur eine makro-Regel gibt, können Sie Sie manuell ganz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für ein Allgemeines Verständnis der Ströme in Scheme, würde ich empfehlen, Abschnitt §3.5-Streams in der SICP Buch. Es wird dich lehren, die grundlegenden Konzepte zu lösen stream-Probleme wie die, die in die Frage.
Bezug auf das problem in der Frage, hier ist die Allgemeine Idee, um es zu lösen:
"red"
und die anderen"blue"
interleave
im SICPSieht es aus wie Sie waren, zu Fragen, wie bauen Sie Ihre eigenen streams mit thunks, das haben andere schon beantwortet. Nur für den Fall, es ist erwähnenswert, dass der Schläger hat eine stream-Bibliothek built-in und die meisten Racketeers verwenden würde, die für streams.
Hier ein Beispiel:
Schrieb ich SRFI-41, die beschreibt, streams, bietet eine Implementierung, und gibt viele Beispiele. Die streams gibt es von denen abweichen, die in SICP, und sind "besser" in einer Weise erklärt, in die SRFI.
Ich bin ein Neuling in diesem, aber die folgenden Lösungen scheint zu funktionieren so gut: