13

Christian Queinnec 写了一部名为 LISP In Small Pieces 的杰作,其中包含 11 个 Lisp 解释器和两个 Lisp 编译器。

当您从此处的网站下载代码时- 它有评论:

The programs of this book are available on the net. 
These programs used to run with some Scheme systems around 1994.

任何的想法:

(a) 这些在当时运行的 Scheme 系统是什么,更重要的是;

(b) 这些今天将在什么 Scheme 系统上运行?

4

5 回答 5

7

里面有很多节目。我做了一些测试,看看我能在多大程度上回答这个问题,而不必单独尝试。tarball 中有 131 个文件,扩展名为“.scm”。但是,似乎有带有其他扩展名的 Scheme 程序,例如 .bgl。所以我搜索了前五行中包含“L i S P”的文件。这会产生 173 个文件。我尝试在我首选的方案实现上运行所有这些。其中 31 次运行没有错误。几乎所有这些都在“src”目录中。因此,特定于语言的程序确实看起来是特定于语言的。让我们看一下失败的 src/ 文件之一,“chap9z.scm”。它令人窒息define-abbreviation。我不知道这个符号的起源,但它在 guile 的任何地方都没有定义。syntax-rules.

于 2012-05-01T22:44:19.573 回答
5

1994 年存在的一些 Scheme 实现仍然存在和维护:Scheme 48Chez SchemeGambitBiglooMIT SchemeSCM

来自 LiSP 的代码可能会在其他现代 Scheme 系统中运行,例如GuileLarceny

就个人而言,我建议使用Racket。最有可能的是,大部分代码#lang racket无需更改即可运行,并且不需要使用[](但您的代码可能更易于阅读:)。不工作的东西可能很容易修复,您还可以使用 Racket 提供的 R5RS 语言实现,它可能适用于所有代码。

于 2012-04-30T15:09:40.727 回答
4

(a) 这些当时运行在什么 Scheme 系统上

来自作者网站的源 tarball中的 Makefile具有在 bigloo、elk、gambit、mit-scheme、scheme2c 和 scm 下运行代码的目标。

Makefile 提到 SCM 4e1 和 Bigloo 1.9d 是已知的工作版本,尽管我自己没有测试过它们。我没有发现任何提及其他方案的特定版本。

(b) 这些今天将在什么 Scheme 系统上运行?

此 github 存储库中的代码已更新,因此包含的测试套件中的几乎所有测试都通过了当前(截至 06/2014)版本的 bigloo、gambit 和 mit-scheme。

如果您只想能够运行代码并按照本书进行操作,那么其中一种方案应该适合您。

[完全披露:我是回购的所有者,我是计划菜鸟。repo 中的代码是WOMM认证的,但你的里程可能会有所不同。]

另一方面,如果你不满足于使用 bigloo / gambit / mit-scheme,那么在这里添加对 guile / racket / insert-favorite-scheme-scheme 的支持应该不会太难。使用其中一个book.*文件作为起点,例如gambit/book.scmmitscheme/book.mit. 如果您可以book.scm在您喜欢的方案中加载一个版本,然后查看test.interpretersmake 目标,最后查看grand.test目标以验证事情是否按预期工作。

于 2014-06-25T00:48:03.340 回答
2

包含的README文件指出:

这些文件使用带有测试套件驱动程序 (tester.scm)、define-syntax 和 define-abbreviation 宏(使用 Dybvig 的语法案例包)和对象系统的 Scheme 解释器进行了测试:Meroonet (meroonet.scm) .

可以使用 Bigloo、Scheme->C、Gambit、Elk 或 SCM。前三个更好,因为可以构建一个专门的解释器,其中包含一个已编译的 Meroonet 和已编译的卫生宏。

于 2012-05-02T08:27:10.937 回答
0

显然 Appleby 已经发布了源代码的更新版本。球拍不见了)=

https://github.com/appleby/Lisp-In-Small-Pieces

于 2014-07-04T15:21:56.660 回答