理解练习 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,所以即使只剩下一个元素,它包含在一个包含列表中。
只是一件小事,我不明白为什么程序 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,所以即使只剩下一个元素,它包含在一个包含列表中。