lambda 是书上的原子 "the little schemer" 吗?

Is a lambda an atom in the book "the little schemer"?

我正在阅读本书的第 10 章 "The little schemer - 4th edition",它实现了一个简单的 schemer 解释器。所有其他内容对我来说都很好,除了第 188 页中的函数 :atom?

(define :atom?
  (lambda (x)
    (cond
      ((atom? x) #t)
      ((null? x) #f)
      ((eq? (car x) (quote primitive)) #t)
      ((eq? (car x) (quote non-primitive) #t)
      (else #f)))))

这一行我不清楚:

((eq? (car x) (quote non-primitive) #t)

从本书的上一篇来看,non-primitive对应的是一个lambda定义。

(lambda (x) (+ x 1))

的值是(与传递环境table):

(non-primitive (table (x) (+ x 1)))

这是否意味着 lambda 定义是书中的 atom

我猜是,但不太确定,因为我找不到书中提到的他们的关系。

源代码(lambda (x) (+ x 1))不会是原子,但导致闭包的计算值应该被计算者识别为原子。

在 lisps 中,所有不是列表的都是原子。你可以这样定义它:

(define atom?
  (lambda (x)
    (not (or (null? x)
             (pair? x)))))

现在,如果您将闭包建模为 pairs,并将第一个元素作为标记来标识它,您需要确保它们也被评估为原子的,这就是您的 :atom? 通过寻找primitivenon-primitive