【发布时间】:2013-05-31 17:19:25
【问题描述】:
我正在尝试通读“The Little Lisper”,但在第一章中已经遇到了障碍。我对 Emacs 比较陌生(这激发了我对学习 Lisp 和 clojure 的兴趣)。我下载了 Mit-scheme 应用程序,并正在 Edwin 上进行练习。
我正在尝试:
(atom? (cons a l))
其中 a 是一个原子,l 是一个已经定义的列表。我收到以下错误:
;Unbound variable: atom?
为什么?我使用“null”没有问题?功能。我想“原子?”是一个内部函数,检查返回的值是否为原子。
任何解释将不胜感激。我还没有设置我的emacs来运行scheme,所有lisp方言之间的细微差别正在考验我的耐心。
【问题讨论】:
-
Scheme 和 Lisp 不一样,scheme 没有
atom?谓词。但是您可以轻松实现自己的:stackoverflow.com/questions/5404707/… -
我确实看到了那个帖子,但我认为我没有正确理解它。我知道我的错误是我试图在以方案模式运行的“Edwin”中进行这些练习。你能告诉我任何其他应用程序,我可以在其中尝试使用“The Little Lisper”的示例吗?我应该在 emacs 上尝试 sbcl 吗?仍在努力通过 define/defun/defn 适合的地方:-)
-
您可以尝试clisp,但您也可以切换到方案书。经典Structure and interpretation of computer programs 的完整文本可免费获得。
-
atom?不是 Common Lisp(由 clisp 实现)中的函数。事实上,在 Common Lisp 中,谓词通常以“p”后缀命名,因此名称atom?确实暗示了 Scheme。 -
@AndersLindahl Lisp 今天其实有点模棱两可,但在 70 年代小 Lisper 出来的时候就不是这样了。 1978 年的 R1RS 在 MacLisp 上运行,并使用原语中的实现和名称。因此 atom、eq 和 null 是 R1RS 原语。在 R2RS 中,他们从问号开始,从那时起,这就是 Scheme 和 Common Lisp 之间的一个明显区别。 SICP 视频说他们教你 Lisp,但它确实是 R3RS。
标签: lisp scheme mit-scheme the-little-schemer