为何在Scheme中空列表会被判定为atom?Chicken Scheme相关疑问
关于Chicken Scheme中
atom?对空列表返回#t的问题 首先要明确:Scheme标准(如R5RS、R6RS/R7RS)并没有定义atom?这个过程——它大多是《The Little Schemer》这类教学书籍里自定义的辅助过程,不同资料对它的定义可能存在差异。
你遇到的情况确实是Chicken Scheme的实现选择:它内置的atom?把所有非pair的对象都视为atom,包括空列表'()、符号、数字、布尔值、字符串,甚至过程对象。所以(atom? '())返回#t完全符合它的定义。
你之前的认知可能来自某些教学材料,比如部分教程里会把atom?定义为“非pair且非空列表的对象”,类似这样:
(define atom? (lambda (x) (and (not (pair? x)) (not (null? x)))))
这种定义下(atom? '())才会返回#f,但这只是自定义实现,并非Scheme标准要求的。
如果需要和你之前认知一致的atom?行为,完全可以自己重新定义上面这个过程,覆盖Chicken的内置版本即可。
内容的提问来源于stack exchange,提问作者Harshal Patil
相关产品推荐
相关产品推荐

