Tôi đang cố gắng khôi phục dự án cũ (1999 hoặc cũ hơn) được viết trong Đề án (PLT-Scheme, sử dụng công cụ dòng lệnh thông dịch mzscheme
)? Để làm cho vấn đề tồi tệ hơn, tôi không biết Đề án, hoặc Lisp (trên thực tế, tôi muốn tìm hiểu, nhưng đó là một câu chuyện khác).Phục hồi dự án PLT-Đề án cũ (trước 1999)
Tôi có mã nguồn của dự án tại địa chỉ:
Bây giờ, khi chạy đoạn code, nó bails ra với một thông báo lỗi như dưới đây:
Sherman runtime version 0.5
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt)
reference to undefined identifier: list->block
(Tôi đã thử các phiên bản PLT-Scheme 52, 53, 103, 103p1. Các phiên bản trước đó không cho phép tùy chọn mzscheme -L
, đó là ref bị ràng buộc trong tập lệnh sherman.bat
được sử dụng trong dự án. Các phiên bản sau cũng có một số vấn đề nghiêm trọng hơn với mã hoặc tùy chọn)
Khó khăn là, từ những gì tôi thấy, list->block
thực là định nghĩa - xem:. collects/sherman/BLOCK.SS
line 48. Vì vậy, những gì là sai?
Để chạy mã, tôi thực hiện các bước sau:.
- Tải PLT-Đề án v 103p1 (từ the old versions download page - lần đầu tiên đóng "Đề án PLT hiện vợt" banner) - dành cho Windows, sử dụng: mz-103p1-bin-i386-win32.zip.
- Giải nén (ví dụ: đến thư mục
c:\PLT
). - Sao chép
c:\sherman\collects\sherman
thư mục có nội dung tới:c:\PLT\collects\sherman
(trong đóc:\sherman
chứa nội dung của github repository). - Chạy
cmd.exe
, sau đócd c:\sherman
. set PATH=c:\PLT;%PATH%
sherman.bat run trivial.s
- lệnh này là trong thực tế, từ những gì tôi hiểu, tương đương với:
(require-library "runtime.ss" "sherman") (parameterize ((current-namespace sherman-namespace)) (load "trivial.s")) (current-namespace sherman-namespace)
- Sau đó, tôi nhận được lỗi như mô tả ở trên (phiên bản MzScheme sẽ được báo cáo là 103p1 hoặc bất kỳ điều gì).
Bạn có thể giúp tôi giải quyết sự cố không?
CHỈNH SỬA 2: GIẢI PHÁP!
Đối với người mà nó có thể quan tâm, tôi đã thêm một giải pháp hoàn chỉnh soegaard's help.
Nói tóm lại:
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)
Có thể, sẽ dễ dàng hơn khi chuyển mã có liên quan sang Racket, sử dụng '#lang mzscheme' ở đầu mỗi tệp. –
@ SamTobin-Hochstadt: Tôi sẽ không gặp khó khăn khi chuyển các cuộc gọi khác nhau đến các thư viện cũ? Từ những gì tôi đã thử, ví dụ: dạng '(require-library)' (được sử dụng rộng rãi trong dự án này) thậm chí không thể tìm thấy trong tài liệu Racket trực tuyến? – akavel
Biểu mẫu 'require-library' là một phiên bản cũ của' require'. Bạn có thể muốn đọc [hướng dẫn porting] (http://docs.racket-lang.org/release/index.html) trong tài liệu (ví dụ: đề cập đến 'require-library'). –