Ich versuche, ein altes (1999 oder früher) Projekt in Scheme (PLT-Schema, mit dem mzscheme
Interpreter (?) Kommandozeilen-Tool). Um die Sache noch schlimmer zu machen, kenne ich Scheme oder Lisp nicht (ich möchte es sogar lernen, aber das ist eine andere Geschichte).Wiederbeleben altes PLT-Schema-Projekt (vor 1999)
Ich habe den Quellcode des Projekts an:
Nun, wenn der Code ausgeführt wird, es bürgt wie unten mit einer Fehlermeldung aus:
Sherman runtime version 0.5
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt)
reference to undefined identifier: list->block
(Ich habe versucht, PLT-Schema-Versionen 52, 53, 103, 103p1. Frühere Versionen erlauben mzscheme -L
Option, die Ref. Ist In der sherman.bat
Skript im Projekt verwendet. Spätere Versionen haben auch einige ernstere Probleme mit dem Code oder Optionen)
Die Schwierigkeit besteht darin, dass von dem, was ich sehe, list->block
tatsächlich ist definiert - siehe:. collects/sherman/BLOCK.SS
line 48. Also, was ist falsch?
um den Code auszuführen, habe ich die folgenden Schritte aus:.
- herunterladen PLT-Scheme v 103p1 (von the old versions download page - zuerst die "PLT Scheme ist jetzt Racket" closing Banner) - für Windows, Verwenden Sie: mz-103p1-bin-i386-win32.zip.
- Entpacken (z. B. in das Verzeichnis
c:\PLT
). - Kopieren
c:\sherman\collects\sherman
Verzeichnis mit Inhalt zu:c:\PLT\collects\sherman
(wo enthält den Inhalt der github repository). - Führen Sie
cmd.exe
, danncd c:\sherman
. set PATH=c:\PLT;%PATH%
sherman.bat run trivial.s
- dieser Befehl ist in der Tat, von dem, was ich verstehe, das entspricht:
(require-library "runtime.ss" "sherman") (parameterize ((current-namespace sherman-namespace)) (load "trivial.s")) (current-namespace sherman-namespace)
- Danach habe ich die Fehler wie beschrieben oben (MzScheme-Version würde als 103p1 oder was auch immer gemeldet werden).
Können Sie mir helfen, das Problem zu lösen?
EDIT 2: Gelöst!
Um wen es angeht, habe ich ein vollwertiges "How to use this project" instruction on the project page, hinzugefügt, um soegaard's help die Lösung für das Problem dank Detaillierung.
Kurz:
copy trivial.s trivial.rs
rem (the above is workaround for problems with 'r2s.exe <trivial.r> trivial.rs')
sherman.bat compile trivial.rs
sherman.bat run trivial.zo
rem (or: sherman.bat run trivial.ss)
Wahrscheinlich wäre es einfacher, den relevanten Code auf Racket zu portieren, indem Sie '#lang mzscheme' am Anfang jeder Datei verwenden. –
@ SamTobin-Hochstadt: Wird es mir nicht schwer fallen, verschiedene Anrufe in alte Bibliotheken zu portieren? Von dem, was ich versuchte, z. das Formular '(require-library)' (in diesem Projekt häufig verwendet) ist nicht einmal in der Online-Racket-Dokumentation zu finden? – akavel
Das Formular 'require-library' ist eine alte Version von' require'. Wahrscheinlich möchten Sie die [porting guides] (http://docs.racket-lang.org/release/index.html) in den Dokumenten lesen (z. B. "require-library"). –