只是一件小事,我不明白为什么程序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
也一样。
答案 0 :(得分:1)
此处的问题是(cdr '((1 2) (3 4)))
不是 '(3 4)
。相反,它是'((3 4))
。
这是因为列表是列表,包含三个元素:两个列表和空列表(null
)。这意味着列表,以对表示,实际上看起来像这样:
'((1 2) . ((3 4) . ()))
由于cdr
获得了一对的右侧,它返回列表的 rest ,因此即使只剩下一个元素,它也会被包含在一个包含列表中。 / p>