【发布时间】:2012-09-14 22:07:27
【问题描述】:
我正在尝试恢复一个用 Scheme(PLT-Scheme,使用 mzscheme 解释器 (?) 命令行工具)编写的旧(1999 年或更早)项目。更糟糕的是,我不知道 Scheme 或 Lisp(其实我也想学,但那是另一回事了)。
我有项目的源代码在:
现在,当运行代码时,它会退出并显示如下错误消息:
Sherman runtime version 0.5
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt)
reference to undefined identifier: list->block
(我试过PLT-Scheme版本52, 53,103、103p1。早期版本不允许mzscheme -L选项,在项目中使用的sherman.bat脚本中引用了这个选项。后来的版本还有更多代码或选项存在严重问题。)
困难在于,据我所见,list->block 实际上 已定义 - 请参阅:collects/sherman/BLOCK.SS line 48。那么,有什么问题呢?
要运行代码,我执行以下步骤:
- 下载 PLT-Scheme v. 103p1(来自 the old versions download page - 首先关闭 “PLT Scheme is now Racket” 横幅)- 对于 Windows,使用:mz-103p1-bin-i386-win32.zip。
- 解压缩(例如到目录
c:\PLT)。 - 将包含内容的
c:\sherman\collects\sherman目录复制到:c:\PLT\collects\sherman(其中c:\sherman包含github repository 的内容)。 - 运行
cmd.exe,然后运行cd c:\sherman。 set PATH=c:\PLT;%PATH%-
sherman.bat run trivial.s- 这个命令其实据我理解,相当于:
- 之后,我收到上述错误(MzScheme 版本将报告为 103p1 或其他)。
你能帮我解决这个问题吗?
编辑 2:已解决!
对于它可能关心的人,我添加了一个成熟的"How to use this project" instruction on the project page,感谢soegaard's help,详细说明了问题的解决方案。
简而言之:
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)
【问题讨论】:
-
可能,将相关代码移植到 Racket 会更容易,在每个文件的顶部使用
#lang mzscheme。 -
@SamTobin-Hochstadt:将各种调用移植到旧库中会不会有困难?根据我的尝试,例如
(require-library)表单(在此项目中广泛使用)甚至在在线 Racket 文档中都找不到? -
require-library形式是require的古老版本。您可能想阅读文档中的porting guides(例如,其中提到了require-library)。 -
@AsumuTakikawa:啊,搜索了类似的东西,但找不到。非常感谢您的链接,可能会有所帮助!
-
+1 纯粹是因为这个问题写得很好。我完全不知道答案是什么。