理解练习 2.29 SICP - 二进制模块

Understanding exercise 2.29 SICP - Binary modules

只是一件小事,我不明白为什么程序 right-branch 是这样的:

(define (right-branch mobile)
   (car (cdr mobile)))

而不是:

(define (right-branch mobile)
   (cdr mobile))

据我所知,car 过程 return 列表中的第一项和 cdr return 列表的 "rest"。所以,如果我们有这样的手机:

((1 2) (3 4))

左边的分支是(1 2),右边的分支是(3 4)。是这样还是我错过了什么?谢谢。

程序branch-structure也是如此。

这里的问题是 (cdr '((1 2) (3 4))) 而不是 '(3 4)。相反,它是 '((3 4)).

这是因为列表是一个列表,包含三个元素:两个列表和一个空列表(null)。这意味着以成对表示的列表实际上如下所示:

'((1 2) . ((3 4) . ()))

由于cdr得到一对的右侧,它returns列表的rest,所以即使只剩下一个元素,它包含在一个包含列表中。