当这两个运算符作用域一个list的时候,car返回的是第一个元素,cdr返回的是除去第一个元素之后的其他元素”组成的表”,
看一个例子:
(car '(1 2 3))
=> 1
(cdr '(1 2 3))
=> (2 3)
我之前一直很奇怪,为什么car返回的是一个”不穿衣服的“元素,而cdr返回的是一个”穿衣服的“的东西呢?
原来car和cdr的本意是用来操作pair的,pair就是(A . B)这样的数据结构,而list是特殊的pair,list的第二个元素本身又是一个pair,就是( 1 (2 (3 ()))这样的,所以当cdr作用域(1 (2 (3 ()))这样的list的时候,返回的是带括号的一个东西。
所以,我最后要纠正一下一开头说的那一句话,cdr其实不是返回除第一个元素之后的那些元素组成的表,而是很简单,就是返回pair的第二个成员,对list而言,第二个成员本身就带着括号的。