【问题标题】:LISP In Small Pieces - best LISP environment to run code in?LISP In Small Pieces - 运行代码的最佳 LISP 环境?
【发布时间】:2012-05-08 21:30:48
【问题描述】:

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

当你从here 网站下载代码时 - 它有评论:

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 系统上运行?

【问题讨论】:

  • 你为什么不安装球拍并尝试运行一些程序?
  • @hawkeye 不,我只是说作为我日常使用中的方案实现,我使用这些实现。请注意:如果您尝试运行的代码在 let 等某些地方使用括号而不是父代码,那么它将仅适用于 drScheme 或球拍,并且 drScheme 不是真正的方案,因为真正的方案不使用括号。
  • @jcubic 这有点苛刻。尽管我对方括号有意见,但它是 R6RS 的一部分,并且长期以来一直与许多主要实现(如 Chez 和 Racket)一起使用。你不能说它们不是真正的 Scheme 实现。
  • 其实Guile已经默认接受over two years的方括号了。

标签: lisp scheme common-lisp racket


【解决方案1】:

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

【讨论】:

  • 我敢打赌 define-abbreviation 在源代码的其他地方被定义为宏。
  • 我看了但没找到。我需要一个基于 sexp(而不是基于行)的 grep!
  • @gcbeison,它似乎是在特定于平台的部分中定义的。例如,参见elk/book.elk,它是通过调用expand-syntax 来定义的。
  • 太棒了 - 你为回答这个问题付出了很大的努力。
【解决方案2】:

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

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

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

【讨论】:

  • 代码(至少来自第 1 章)在 #lang 球拍中不会“按原样”运行,因为 con 单元格不可变。
  • 您可以在r5rs 模式下运行它(或者在DrRacket 中选择该语言,使用文件顶部的plt-r5rs 可执行文件, or add #lang r5rs`)。跨度>
【解决方案3】:

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

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

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

(b) 目前这些系统将在哪些 Scheme 系统上运行?

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

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

[完全披露:我是回购协议的所有者,而且我是一个 Scheme 菜鸟。 repo 中的代码是WOMM 认证的,但你的里程可能会有所不同。]

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

【讨论】:

    【解决方案4】:

    包含的README 文件状态:

    这些文件是使用带有扩展的 Scheme 解释器测试的 一个测试套件驱动程序(tester.scm), 定义语法和定义缩写宏(使用 Dybvig 的语法案例包), 和一个对象系统:Meroonet (meroonet.scm)。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-17
        • 2010-09-18
        • 1970-01-01
        • 2020-09-16
        相关资源
        最近更新 更多