6

我正在尝试通过“The Little Lisper”并且在第一章中已经遇到了障碍。我对 Emacs 比较陌生(这激发了我对学习 Lisp 和 clojure 的兴趣)。我下载了 Mit-scheme 应用程序,并在 Edwin 上进行练习。

我正在努力:

(atom? (cons a l))

其中 a 是一个原子,l 是一个已经定义的列表。我收到以下错误:

;Unbound variable: atom?

为什么?我使用“null”没有问题?功能。我想“原子?” 是一个内部函数,检查返回的值是否是原子。

任何解释将不胜感激。我还没有设置我的emacs来运行scheme,所有lisp方言之间的细微差别正在考验我的耐心。

4

3 回答 3

5

在“The Little Schemer”(“The Little Lisper”的更新版本)中,atom?过程定义如下(因为atom?在 Scheme 中不存在):

(define (atom? x)
  (and (not (null? x))
       (not (pair? x))))

如果您正在关注这本书的旧版本,我建议您要么寻找更新版本,要么使用书中使用的相同编程语言:The Little Lisper 的 Common Lisp,The Little Schemer 的 Scheme - 并且 Racket 是很棒的 Scheme IDE 可以使用!在使用 Racket 浏览 The Little Schemer 时,请查看此答案以获取一些提示。

于 2013-06-05T17:11:09.077 回答
2

我正在尝试通过“The Little Lisper”...我下载了 Mit-scheme

Common Lisp 和 Scheme 是非常不同的语言。

您必须使用不同的书(例如SICP)来匹配您的语言实现,或者使用不同的语言实现(例如clispsbcl)来匹配您的书。

于 2013-06-05T13:41:21.903 回答
1

看一下Scheme R5RS规范;它包括函数列表和句法关键字。虽然不是 Scheme 标准的一部分,但 mit-scheme 有一个函数apropos可以找到具有给定名称的函数(其他东西)。尝试:

(apropos "atom")

(但它不会显示任何东西,:-)。

原子不是“cons cell”(一般来说,如果我记得我的 CommonLisp)。在方案中,您可以将其实现为:

(define (atom? thing) (not (pair? thing)))

注意:这个定义atom?与 CommonLisp 一致atom

于 2013-06-05T14:13:04.270 回答