Scheme, SICP, R5RS, warum ist Delay keine spezielle Form?

8

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?

    
KnowsLittle 10.04.2011, 08:01
quelle

1 Antwort

15

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:

%Vor%

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:

%Vor%     
Eli Barzilay 10.04.2011, 08:07
quelle

Tags und Links