Kann mir jemand helfen, besser zu verstehen, wie man einen Stream schreibt?
Ich verstehe, dass ein Stream eine unendliche Folge von Werten ist und die Art, wie ich sie gelernt habe, ist ein Thunk, der, wenn er aufgerufen wird, ein Paar von (1) dem ersten Element in der Sequenz und (2) a erzeugt Thunk, der den Strom für die Elemente der zweiten bis unendlich darstellt
Zum Beispiel:
%Vor% Ich verstehe hier, dass es nur eine Zweierpotenz erzeugt und auf diese zugreift. Zum Beispiel würde der Aufruf von (car (powers-of-two))
zu 2
führen und der Aufruf von (car ((cdr (powers-of-two))))
würde zu 4
Jetzt versuche ich einen Stream namens red-blue
zu schreiben, der zwischen den Strings red
und blue
wechselt, aber ich bin ein wenig verwirrt darüber, wie ich ihn konstruieren soll
Für ein allgemeines Verständnis von Streams in Scheme empfehle ich Abschnitt §3.5 Streams im SICP-Buch. Es wird Ihnen die grundlegenden Konzepte zur Lösung streambezogener Probleme beibringen, wie zum Beispiel den in der Frage.
In Bezug auf das Problem in der Frage, hier ist die allgemeine Idee, es zu lösen:
"red"
und die andere "blue"
erzeugt.
interleave
in SICP Es sieht so aus, als ob Sie gefragt haben, wie Sie Ihre eigenen benutzerdefinierten Streams mit Thunks erstellen können, die andere bereits beantwortet haben. Nur für den Fall, dass Racket eine Stream-Bibliothek eingebaut hat und die meisten Racketeers diese für Streams verwenden würden.
Hier ist ein Beispiel:
%Vor%Ich schrieb SRFI-41 , das Streams beschreibt, eine Implementierung bietet und viele Beispiele gibt. Die Streams dort unterscheiden sich von denen in SICP, und sind in gewisser Weise "besser" in der SRFI erklärt.
Ich bin ein Anfänger, aber die folgenden Lösungen scheinen auch zu funktionieren:
%Vor%