Kann jemand mir helfen, besser zu verstehen, wie man einen Strom schreibt?Streams in Racket
Ich verstehe, dass ein Stream eine unendliche Folge von Werten ist und die Art, wie ich gelernt habe, sie zu programmieren, ist ein Thunk, der, wenn er aufgerufen wird, ein Paar von (1) dem ersten Element in der Sequenz erzeugt und (2) ein Thunk, die den Strom für die zweite durch~~POS=TRUNC-infinity Elemente
zum Beispiel stellt:
(define powers-of-two
(letrec ([f (lambda (x) (cons x (lambda() (f (* x 2)))))])
(lambda() (f 2))))
ich hier verstehen, dass es nur ist eine Zweierpotenz Herstellung und diese zum Beispiel des Zugriff auf (car (powers-of-two))
Aufruf zur Folge hätte in 2
und rufen (car ((cdr (powers-of-two))))
würde re sult in 4
Jetzt versuche ich, einen Strom red-blue
die red
und blue
zwischen Streichern wechselt genannt zu schreiben, aber ich bin ein wenig verwirrt darüber, wie es in Schema
so haben Sie es getan, congrats! Im Abschnitt "Schema" in http://c2.com/cgi/wiki?SieveOfEratosthenesInManyProgrammingLanguages finden Sie ein Beispiel für SICP-formatierte Streams. Es gibt nur eine Makroregel, die Sie manuell anwenden können. –