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?
通过寻找primitive
和 non-primitive
我正在阅读本书的第 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?
通过寻找primitive
和 non-primitive