Ich gehe durch SICP als Selbststudium und bin in der Bildsprache Abschnitt in Kapitel 2. Ich habe DrRacket für die früheren Übungen verwendet, aber ich bekomme Kompilierungsfehler, wenn ich versuche, eine Übung basierend auf der Zeichnung zu machen -line 'Bild Funktion in diesem Abschnitt des Buches.
Genauer gesagt, dieser Code ...
%Vor%... erzeugt diesen Fehler ...
%Vor%Also habe ich in diesem Forum ein wenig recherchiert und das SICP-Paket installiert, das Neil Van Dyke anbietet ( Ссылка ). Ich habe alle Schritte befolgt, die Sprache wie angewiesen in SICP geändert, habe aber immer noch den gleichen Fehler.
Ich nahm an, dass der Zweck dieses Pakets darin bestand, diese "eingebaute" Funktion zu definieren (wie auch andere im Buch). Um einige Fragen vorwegzunehmen, habe ich keine 'require'-Anweisungen in der Datei und benutze' #lang planet neil / sicp ', um die Sprache zu spezifizieren anstatt das Menü zu benutzen (Ich habe auch versucht, die Sprache zu SICP über das Menü zu ändern ein noch seltsamerer Fehler; siehe das Nachspann unten). Meine Umgebung ist Windows 7 und die Version von DrRacket ist 5.3.1.
Vielleicht mache ich gerade einen Anfängerfehler; jede Einsicht würde geschätzt werden.
Danke.
PS: Wenn ich die Sprache über das Menü auf 'SICP (PlaneT 1.17)' setze, bekomme ich den folgenden Fehler für jede Definition, die ich zu kompilieren versuche (selbst das Trivialste) ...
%Vor%In Racket lösten diese Definitionen meine Probleme mit den Zeichnungen in Kapitel 2 von SICP, ich löste erfolgreich die Übungen danach:
%Vor%Ich möchte Alinosar, Flamingo und Oscar für ihren sehr hilfreichen Rat danken.
Ich entschied mich für Oscars Ansatz, der (scheinbar) die Racket-Grafikbibliotheken verwendet, im Gegensatz zu dem von Neil Van Dyke zusammengestellten Spezialpaket (mit dem ich einfach kein Glück hatte). Hier ist der wichtige Teil meines Codes (mit den Definitionen, die nicht von der Grafikbibliothek abhängig sind):
%Vor%Also, ein paar Dinge zu beachten:
1) wie oben erwähnt, verwendet dies die Standard-Sprachsprache, nicht die SICP-Sprache, die der Zweck der Implementierung von Neil Van Dyke ist.
2) Die 'draw-line' Funktion in dieser Bibliothek verwendet ein Viewport (das im Grunde ein Fenster ist) als Parameter und erzeugt eine Funktion, die zwei Koordinaten für Parameter benötigt (und einen optionalen Farbparameter, den ich nicht benutzt habe) . Die "Koordinaten" sind in diesem Fall jedoch nicht die einfachen Vektoren, die die Übungen verwenden. Die Koordinaten sind Instanzen der Struktur 'posn', die im Grunde nur ein Wrapper für die x- und y-Werte ist.
Das Vorhandensein dieses posn-Datentyps bedeutete, dass ich meine Vektoren mit einem posn-Konstruktor einbinden musste, bevor sie in der Funktion "segments-painter" verwendet werden konnten. (Die 'Vektor-zu-Posn'-Funktion ist dieser Wrapper). Beachten Sie auch, dass das in der Buchdefinition von "segments-painter" verwendete Wort "draw-line" durch "line" ersetzt wird, das als (draw-line vp) definiert ist.
3) Interessanterweise definiert die Racket-Grafikbibliothek die Ansichtsfensterkoordinaten etwas anders als erwartet. Die Koordinate (0 0) ist der obere linke Punkt im Bild (ich hätte es unten links vermutet) und (1 1) ist unten rechts. (Beachten Sie, dass ich hier über das Einheitsquadrat spreche. In dem Rahmen, den ich im obigen Code verwende, wären die wahren Koordinaten für die untere rechte Ecke (500 500).)
Seit der Übung, an der ich arbeitete (2.49), zeichnete ich Figuren, die Symmetrie um die horizontale Achse haben, ist diese kleine Falte egal, aber sonst könnte es dich überraschen. Es kommt mir vor, dass ein Weg um diese "Umkehrung" darin besteht, die "Flip-Vert" -Funktion in dem Buch zu verwenden, aber ich habe nicht die Zeit dafür genommen.
Nochmals vielen Dank für die Hilfe!
Ich mache auch SICP-Übungen mit DrRacket. Um Zeichnungsfunktionen zu verwenden, sollten Sie diese Zeilen am Anfang Ihrer Quelldatei hinzufügen:
%Vor%Dann sollten Sie den Grafikkontext wie folgt einrichten:
%Vor%Danach können Sie eine Linie zeichnen:
%Vor%Und speichern Sie die Ergebnisse in einer Datei:
%Vor%Hier ist meine Lösung einer Übung aus Kapitel 2
>Für die meisten Übungen genügt es, das Sicp-Modul vom Planeten zu laden und am Anfang jeder Datei die folgende Sprachdeklaration hinzuzufügen:
#lang planet neil/sicp
Verwenden Sie stattdessen die Fragen zur Bildsprache:
#lang planet neil/sicp
(#%require sicp-pict)
Folgende fehlen:
Welle:
%Vor% Rogers:
Ersetze durch das alternative Grundelement einstein
Wenn Sie auch Ihre eigene Version des Moduls sicp-pict für Übung 2.49 implementieren möchten, ist der einfachste Weg, die Bildbibliothek in der Lernsprache htdp zu verwenden. Setzen Sie Folgendes an die Spitze Ihres Programms:
%Vor%