Scheme 正确列表:在方案列表中隐藏()

Scheme 正确列表:在方案列表中隐藏(),scheme,racket,Scheme,Racket,在Scheme中,使用list定义一个列表可以确保结果是一个正确的列表,这意味着它的最终元素是一个列表() 如果定义了测试列表: (define test (list 27 3)) 并且取列表的长度,Racket说它是2。当一个打印列表时,它只显示(27 3),而不显示() 但是,如果接受(rest(rest测试)),则会出现()。执行(列表参考测试2)会产生错误 如果()在cdr遍历元素时显示为列表中的第三个元素,为什么不将其视为列表的成员 这会不会造成方案中正确列表和不正确列表之间的混淆

在Scheme中,使用
list
定义一个列表可以确保结果是一个正确的列表,这意味着它的最终元素是一个列表
()

如果定义了测试列表:

(define test (list 27 3))
并且取列表的
长度
,Racket说它是2。当一个
打印列表时,它只显示
(27 3)
,而不显示
()

但是,如果接受
(rest(rest测试))
,则会出现
()
。执行
(列表参考测试2)
会产生错误

如果
()
cdr
遍历元素时显示为列表中的第三个元素,为什么不将其视为列表的成员


这会不会造成方案中正确列表和不正确列表之间的混淆

列表是一条成对的链。元素是每对的
car
s,每对的
cdr
是链中下一对的参考

正确列表的最后一对的
cdr
是对特殊
()
对象的引用,该对象表示空列表。它不是列表中的一个元素,因为它在
cdr
中,而不是
car

rest
函数返回一对的
cdr
。所以
(rest(rest-test))
返回第二个
cdr
,它是
()
,因为它在列表的末尾


不正确的列表不会造成混淆。不正确的列表中除了
()
之外,还有其他内容作为链中最后一对的
cdr

列表是一个对链。元素是每对的
car
s,每对的
cdr
是链中下一对的参考

正确列表的最后一对的
cdr
是对特殊
()
对象的引用,该对象表示空列表。它不是列表中的一个元素,因为它在
cdr
中,而不是
car

rest
函数返回一对的
cdr
。所以
(rest(rest-test))
返回第二个
cdr
,它是
()
,因为它在列表的末尾

不正确的列表不会造成混淆。不正确的列表具有链中最后一对的
cdr
以外的内容