是否无法取cdr
个cdr
?
我有这个代码,后两个语句返回一个nil
CL-USER 31 : 1 > (CHOICES 'PANTRY)
((NORTH KITCHEN) (WEST DINING-ROOM))
CL-USER 32 : 1 > (car(CHOICES 'PANTRY))
(NORTH KITCHEN)
CL-USER 33 : 1 > (car(car(CHOICES 'PANTRY)))
NORTH
CL-USER 34 : 1 > (cdr(CHOICES 'PANTRY))
((WEST DINING-ROOM))
CL-USER 35 : 1 > (car(cdr(cdr(CHOICES 'PANTRY))))
NIL
CL-USER 36 : 1 > (cdr(cdr(CHOICES 'PANTRY)))
NIL
在最后两个声明中,我的目标是(DINING-ROOM)
结果,它们是我试图获得它的两种不同方式。
答案 0 :(得分:3)
然后很明显,(second x)
与(first (rest x))
相同,与(car (cdr x))
相同,即(cadr x)
。
这样可能很容易看出,因为
(second (second '((NORTH KITCHEN) (WEST DINING-ROOM))))
==> DINING-ROOM
(cadr (cadr '((NORTH KITCHEN) (WEST DINING-ROOM))))
==> DINING-ROOM
或者,长话短说:
(cadadr '((NORTH KITCHEN) (WEST DINING-ROOM)))
==> DINING-ROOM
如果您想要列表 (DINING-ROOM)
,只需删除最后一个a
:
(cdadr '((NORTH KITCHEN) (WEST DINING-ROOM)))
==> (DINING-ROOM)
请注意,您按照应用程序的顺序删除了 last 的a
,因此它在函数名称中首先 。
答案 1 :(得分:2)
您有两个元素的列表。
CL-USER 1 > '((NORTH KITCHEN) (WEST DINING-ROOM))
((NORTH KITCHEN) (WEST DINING-ROOM))
CL-USER 2 > (length '((NORTH KITCHEN) (WEST DINING-ROOM)))
2
删除第一个并保留其余部分。现在它的长度为一个。
CL-USER 3 > (cdr '((NORTH KITCHEN) (WEST DINING-ROOM)))
((WEST DINING-ROOM))
CL-USER 4 > (length '((WEST DINING-ROOM)))
1
CL-USER 5 > (cdr '((WEST DINING-ROOM)))
NIL
删除第一个并保留其余部分。现在它的长度零。
CL-USER 6 > (length 'nil)
0
然后:
CL-USER 7 > '((NORTH KITCHEN) (WEST DINING-ROOM))
((NORTH KITCHEN) (WEST DINING-ROOM))
删除第一个元素并保留其余元素。
CL-USER 8 > (cdr '((NORTH KITCHEN) (WEST DINING-ROOM)))
((WEST DINING-ROOM))
你拿第一个元素。
CL-USER 9 > (car '((WEST DINING-ROOM)))
(WEST DINING-ROOM)
删除第一个元素并保留其余元素。
CL-USER 10 > (cdr '(WEST DINING-ROOM))
(DINING-ROOM)
cDr ... cAr ... cDr:我们一起cDADr
:
CL-USER 11 > (cdadr '((NORTH KITCHEN) (WEST DINING-ROOM)))
(DINING-ROOM)