适当的列表:方案列表中的隐藏()

时间:2018-12-14 21:58:52

标签: scheme racket

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

如果定义了一个测试列表:

(define test (list 27 3))

并取列表的length,Racket说它是2。当一个prints列表时,它仅显示(27 3),而不显示()

但是,如果有人拿(rest (rest test)),则会出现()。执行(list-ref test 2)会产生错误。

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

这会不会在Scheme中的正确列表和不正确列表之间造成混淆?

1 个答案:

答案 0 :(得分:2)

列表是成对的链。元素是每对的car,每对的cdr是对链中下一对的引用。

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

rest函数返回一对cdr。因此(rest (rest test))返回第二个cdr,即(),因为它位于列表的末尾。

没有不正确列表的混乱。不正确的列表具有()以外的其他内容作为链中最后一对货币对的cdr