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

时间:2015-02-16 19:51:31

标签: scheme sicp

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

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

而不是:

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

据我所知,car过程返回列表中的第一项,cdr返回列表的“其余”。所以,如果我们有这样的手机:

((1 2) (3 4))

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

对于程序branch-structure也一样。

1 个答案:

答案 0 :(得分:1)

此处的问题是(cdr '((1 2) (3 4))) 不是 '(3 4)。相反,它是'((3 4))

这是因为列表是列表,包含三个元素:两个列表和空列表(null)。这意味着列表,以对表示,实际上看起来像这样:

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

由于cdr获得了一对的右侧,它返回列表的 rest ,因此即使只剩下一个元素,它也会被包含在一个包含列表中。 / p>