Sto tentando di resuscitare un vecchio progetto (1999 o precedente) scritto in Schema (PLT-Scheme, utilizzando lo strumento della riga di comando mzscheme
). Per peggiorare le cose, non conosco Scheme, o Lisp (in realtà, voglio imparare, ma questa è un'altra storia).Ripristino del vecchio progetto PLT-Scheme (pre-1999)
Ho il codice sorgente del progetto:
Ora, quando si esegue il codice, balle fuori con un messaggio di errore come di seguito:
Sherman runtime version 0.5
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt)
reference to undefined identifier: list->block
(Ho provato le versioni dello schema PLT 52, 53, 103, 103p1. Le versioni precedenti non consentono l'opzione mzscheme -L
, che è ref inserito nello script sherman.bat
utilizzato nel progetto. Le versioni successive hanno anche alcuni problemi più gravi con il codice o le opzioni)
La difficoltà è che, da quello che vedo, in realtà list->block
è definita - vedi:. collects/sherman/BLOCK.SS
line 48. Quindi, cosa c'è che non va?
Per eseguire il codice, ho effettuare le seguenti operazioni:.
- Scarica PLT-Scheme v 103p1 (da the old versions download page - prima di chiudere la "PLT Scheme è ora Racket" striscione) - per Windows, utilizzare: mz-103p1-bin-i386-win32.zip.
- Decomprimere (ad esempio nella directory
c:\PLT
). - Copia
c:\sherman\collects\sherman
directory con contenuto a:c:\PLT\collects\sherman
(dovec:\sherman
contiene il contenuto di github repository). - Eseguire
cmd.exe
, quindicd c:\sherman
. set PATH=c:\PLT;%PATH%
sherman.bat run trivial.s
- questo comando è infatti, da quanto ho capito, equivalente a:
(require-library "runtime.ss" "sherman") (parameterize ((current-namespace sherman-namespace)) (load "trivial.s")) (current-namespace sherman-namespace)
- Dopo di che, ottengo l'errore come descritto sopra (la versione di MzScheme sarebbe riportata come 103p1 o qualsiasi altra cosa).
Potrebbe aiutarmi a risolvere il problema?
MODIFICA 2: RISOLTO!
A chi può interessare, Ho una vera e propria "How to use this project" instruction on the project page, dettagliando la soluzione al problema, grazie alla soegaard's help.
In breve:
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)
Probabilmente, sarebbe più facile portare il codice rilevante su Racket, usando '#lang mzscheme' nella parte superiore di ciascun file. –
@ SamTobin-Hochstadt: Non avrò difficoltà a trasferire varie chiamate verso le vecchie librerie? Da quello che ho provato, ad es. il modulo '(require-library)' (usato estesamente in questo progetto) non è nemmeno rintracciabile nei documenti del Racket online? – akavel
Il modulo 'require-library' è una versione antica di' require'. Probabilmente vorrai leggere le [guide di porting] (http://docs.racket-lang.org/release/index.html) nei documenti (che menziona 'require-library', ad esempio). –