我正试图通过“The Little Lisper”并在第一章中遇到障碍。我对Emacs比较陌生(这激发了我学习Lisp和clojure的兴趣)。我下载了Mit-scheme app,正在Edwin上练习。
我正在尝试:
(atom? (cons a l))
其中a是原子,l是已定义的列表。我收到以下错误:
;Unbound variable: atom?
为什么呢?我使用“null”没有问题吗?功能。我以为“原子?”是一个内部函数,检查返回的值是否为原子。
任何解释都会非常感激。我仍然没有设置我的emacs来运行方案,所有lisp方言之间的细微差别正在考验我的耐心。
答案 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 非常不同的语言。
答案 2 :(得分:1)
看一下Scheme R5RS规范;它包括一系列函数和语法关键字。虽然不是Scheme标准的一部分,但mit-scheme有一个函数apropos
,可以找到具有给定名称的函数(其他东西)。尝试:
(apropos "atom")
(但它不会显示任何内容,: - )。
原子不是“利弊细胞”(通常,如果我记得我的CommonLisp)。在Scheme中,您可以实现一个:
(define (atom? thing) (not (pair? thing)))
注意:atom?
的此定义与CommonLisp atom
一致。