为什么我得到“原子”的未绑定错误?

时间:2013-06-05 06:03:07

标签: lisp scheme mit-scheme the-little-schemer

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

我正在尝试:

(atom? (cons a l))

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

;Unbound variable: atom?

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

任何解释都会非常感激。我仍然没有设置我的emacs来运行方案,所有lisp方言之间的细微差别正在考验我的耐心。

3 个答案:

答案 0 :(得分:4)

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

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

如果您正在阅读本书的旧版本,我建议您寻找更新版本或使用本书中使用的相同编程语言:Little Lisper的Common Lisp,Little Schemer的Scheme - 和Racket是一个很棒的Scheme IDE可以使用!在使用Racket浏览The Little Schemer时,请查看此answer的一些提示。

答案 1 :(得分:2)

  

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

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

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

答案 2 :(得分:1)

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

(apropos "atom")

(但它不会显示任何内容,: - )。

原子不是“利弊细胞”(通常,如果我记得我的CommonLisp)。在Scheme中,您可以实现一个:

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

注意:atom?的此定义与CommonLisp atom一致。