Scheme 重建旧公共小巴计划项目(1999年前)
我正在尝试恢复一个用Scheme(PLT Scheme,使用Scheme 重建旧公共小巴计划项目(1999年前),scheme,racket,Scheme,Racket,我正在尝试恢复一个用Scheme(PLT Scheme,使用mzschemeinterpreter(?)命令行工具)编写的旧项目(1999年或更早)。更糟糕的是,我不知道Scheme或Lisp(事实上,我想学习,但那是另一个故事) 我的项目源代码位于: 现在,当运行代码时,它会跳出一条错误消息,如下所示: Sherman runtime version 0.5 Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew F
mzscheme
interpreter(?)命令行工具)编写的旧项目(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方案版本103、103p1。早期版本不允许mzscheme-L
选项,该选项在项目中使用的sherman.bat
脚本中引用。更高版本的代码或选项也有一些更严重的问题。)
困难在于,从我所看到的,list->block
实际上是定义的-参见:。那么,怎么了
要运行代码,我将执行以下步骤:
c:\PLT
)c:\sherman\collects\sherman
目录及其内容复制到:c:\PLT\collects\sherman
(其中c:\sherman
包含目录的内容)cmd.exe
,然后运行cd c:\sherman
set PATH=c:\PLT;%路径%
sherman.bat运行平凡的.s
- 据我所知,这个命令实际上相当于:
- 在那之后,我得到了如上所述的错误(MzScheme版本将被报告为103p1或其他类型)
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)
复制平凡的.s平凡的.rs
rem(以上是针对“r2s.exetriatile.rs”问题的解决方法)
sherman.bat.rs
sherman.bat run triple.zo
rem(或:sherman.bat run triple.ss)
不是答案,但有几个注释太大,不适合评论
1. Sanity Check
错误消息显示list->block
未定义。
确保block.ss
中的代码已按运行
在block.ss中插入(显示“block.ss已加载!”)
只是为了确保代码已运行
文件blocks.ss
以以下内容开头:
(require-library "functios.ss")
(require-library "synrule.ss")
(require-library "stream.ss" "sherman")
文件“sherman/stream.ss”位于存储库中,
但是“synrule.ss”和“functios.ss”在哪里呢
啊。。。这个代码是旧的!下面是对
require库的工作方式。它列出了functios.ss
和synrule.ss
作为MzLib的一部分
让我们看看require库的工作原理:
当使用require library加载文件时,库名称和
结果值记录在与当前值关联的表中
命名空间。如果需要库,则为
已在当前命名空间的加载表中注册,则
库未再次加载;负荷表中记录的结果
而是返回
因此,当运行block.ss
中的代码时,名称存储在名称空间中。如果当前名称空间是错误的,当计算block.ss
中的代码时,它会解释list->block
未定义的错误消息。可能,将相关代码移植到Racket会更容易,在每个文件的顶部使用#lang mzscheme
。@SamTobin Hochstadt:将各种调用移植到旧库不是有困难吗?根据我的尝试,例如(require library)
表单(在本项目中广泛使用)甚至在在线Racket文档中都找不到?require library
表单是require
的一个古老版本。您可能想阅读文档中的内容(例如,其中提到了要求库
)@Asumotakawa:啊,搜索了类似的内容,但找不到。非常感谢您的链接,可能会有所帮助+1纯粹是因为这个问题写得很好。我完全不知道答案是什么。非常感谢!我已经在runtime.ss
中查看了谢尔曼名称空间的定义,但它看起来不够可疑(特别是有一些类似的#%list->block
),现在多亏了您,这变得更加可疑:)所以,情况有所好转,但。。。仍然不完全是我希望结束的地方。。。所以我更新了这个问题,如果你想再给我一点提示的话,我将非常感激……你到底是如何尝试在triple.s
中运行代码的?我相信triple.s
是lexer的输出,因此必须先编译它,然后运行它。反向引用是一种避免在Scheme中编写lexer的方法(参见自述文件中Joe的评论)!好的,您的评论以及查看各种扩展
s+一些实验终于为我做到了:复制triple.s triple.rs&&sherman.bat编译triple.rs&&sherman.bat运行triple.zo
。非常感谢!(最后一个带有list->block
的补丁需要先恢复)添加了一个完全成熟的补丁,基于所有这些。
2. Random Thoughts
(require-library "functios.ss")
(require-library "synrule.ss")
(require-library "stream.ss" "sherman")