在 MIT Scheme 中,(null?lst) 和 (null? (cdr lst)) 有什么区别?

In MIT Scheme, What is the difference between (null? lst) and (null? (cdr lst))?

我目前正在研究 SICP,我很难理解下面两个表达式之间的区别。假设我们有一个列表,叫做lst,有什么区别:

(null?lst) 和 (null?(cdr lst))

我知道第一个表达式检查列表是否为空。但是第二个表达式不也检查相同的条件吗?换句话说,检查列表的其余部分是否为空。

不,它们不是一回事,(null? lst)只是检查lst是否为空。而 (null? (cdr lst)) 检查 lst 是否只有一个元素,因为 (cdr lst) returns lst 除了第一个元素之外的所有元素。请参阅下面的示例。

> (null? '())
#t

> (null? '(1))
#f

> (null? (cdr '(1)))
#t

> (null? (cdr '(1 2)))
#f