5

我正在尝试恢复一个用 Scheme(PLT-Scheme,使用mzscheme解释器(?)命令行工具)编写的旧(1999 年或更早)项目。更糟糕的是,我不知道 Scheme 或 Lisp(其实我也想学,但那是另一回事了)。

我有该项目的源代码:

github.com/akavel/sherman

现在,在运行代码时,它会退出并显示如下错误消息:

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第 48 行。那么,有什么问题呢?

要运行代码,我执行以下步骤:

  1. 下载 PLT-Scheme v. 103p1(从旧版本下载页面- 首先关闭“PLT Scheme is now Racket”横幅) - 对于 Windows,使用:mz-103p1-bin-i386-win32.zip
  2. 解压缩(例如到目录c:\PLT)。
  3. 将包含内容的目录复制c:\sherman\collects\sherman到:(c:\PLT\collects\sherman其中c:\sherman包含github 存储库的内容)。
  4. 运行cmd.exe,然后cd c:\sherman
  5. set PATH=c:\PLT;%PATH%
  6. sherman.bat run trivial.s
    • 这个命令实际上,据我了解,相当于:
(需要库“runtime.ss”“谢尔曼”)
(参数化((当前命名空间谢尔曼命名空间))(加载“trivial.s”))
(当前命名空间谢尔曼命名空间)
  • 之后,我收到上述错误(MzScheme 版本将报告为 103p1 或其他)。

你能帮我解决问题吗?

编辑 2:已解决!

对于它可能关心的人,我在项目页面上添加了一个完全成熟的“如何使用这个项目”说明,在soegaard的帮助下详细说明了问题的解决方案。

简而言之:

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)
4

1 回答 1

5

不是答案,而是一些注释太大而无法评论。

1. Sanity Check

错误消息说list->block未定义。确保代码block.ss运行,插入只是(display "block.ss is loaded!")为了block.ss 确保代码运行。


2. Random Thoughts

该文件blocks.ss以:

(require-library "functios.ss")
(require-library "synrule.ss")
(require-library "stream.ss" "sherman")

文件“sherman/stream.ss”在存储库中,但“synrule.ss”和“functios.ss”在哪里?

啊...这个代码是旧的!这是如何require-library工作的描述。它列出functios.sssynrule.ss作为 MzLib 的一部分。

http://www.informatik.uni-kiel.de/~scheme/doc/mzscheme/node158.htm

让我们看看是如何require-library工作的:

当 require-library 用于加载文件时,库名称和结果值将记录在与当前命名空间关联的表中。如果为已经在当前命名空间的加载表中注册的库评估 require-library,则不会再次加载该库;而是返回负载表中记录的结果。

因此,当block.ss运行中的代码时,名称存储在命名空间中。如果当前命名空间是错误的,那么在block.ss评估代码时,它会向您解释list->block未定义的错误消息。

于 2012-09-23T11:13:07.163 回答