Dies bezieht sich auf Kapitel 3.5 von SICP, in dem Streams diskutiert werden. Die Idee ist:
%Vor%Sollte nicht den zweiten Teil des Cons-Streams auswerten, also sollte er nicht "Hey" drucken. Das passiert, ich bekomme folgende Ausgabe:
hey (1. # & lt; Versprechen & gt;)
Meine Schlussfolgerung ist also, dass die Verzögerung nicht als spezielle Form implementiert wird? Oder mache ich etwas falsch? Ich benutze die folgende Implementierung:
%Vor%Mit Verzögerung als Standard-R5RS-Implementierung. Ist das ein Fehler in der Umsetzung, oder tue ich das nicht oder verstehe ich es richtig?
Sie tun ein Versprechen, aber das Versprechen wird in Ihrem cons-stream
erstellt, was bedeutet, dass es zu spät ist und der Ausdruck bereits ausgewertet wurde. Versuchen Sie Folgendes:
und Sie werden sehen, dass es zu früh ausgewertet wird. Aus demselben Grund:
%Vor% und jede andere unendliche Liste funktioniert nicht, wenn% code% eine Funktion ist. Das Problem ist, dass cons-stream
ein spezielles Formular ist, aber Sie verwenden dieses Feature nicht, da Sie delay
als einfache Funktion definieren. Sie müssen cons-stream
als Makro definieren, wenn Sie sich it auch auf die gleiche Art und Weise verhalten wollen. Zum Beispiel: