当应用于正确的列表时,cdr
将始终返回另一个列表(包括'()
空列表).
使用正确的列表我的意思是一个以空列表结尾的列表.例如,当您(define lst '(4 5))
在引擎盖下执行此操作时,这将被分配给lst
:(cons 4 (cons 5 '()))
,因此当您评估时,您(cdr lst)
将获得第一个元素,第二个元素cons
恰好是(cons 5 '())
,然后将其打印为(5)
.
为了仅提取列表中的第二个元素(不是第一个元素cons
,这是什么cdr
),您可以:
(car (cdr lst))
或仅仅(cadr lst)
是简短的(second lst)
(define cell (cons 4 5))
或(define cell '(4 . 5))
构建一个cons单元格然后你可以(car cell)
用来提取第一个元素并(cdr cell)
提取第二个元素.