有人可以给我一个基本的解释,说明car
和cdr
在方案中的变化吗?
如果我是正确的,car
将返回列表中的第一项。 cdr
将返回不包含第一个元素的列表。
我对其他变体感到困惑,更具体地说是cadar
,caddr
,cddr
等等。
我说这是一个随机的例子:
define X '(a b (c d e))
(car X)
(cdr X)
(cadr X)
(cadar X)
(car X)
会产生 a
,(cdr X)
会产生 (b (c d e))
,cadr
会产生 b
的。但我不知道如何推断car
/ cdr
的任何其他变体,例如cadar
。
答案 0 :(得分:20)
您可以通过解析这些函数的名称来推断这些函数的含义:
在第一个字母('c')和最后一个('r')之间,'a'表示“汽车”,而'd'表示“cdr of”。
所以:
cadr
是“cdr的车”,cddr
是cdr的cdr,cadar
是“汽车司机的车”(因此参数必须是列表清单),答案 1 :(得分:5)
最简单的方法是将其输入到方案解释器中:
(car X) -> a
(cdr X) -> (b (c d e))
(cadr X) -> (car (cdr X)) -> (car '(b (c d e))) -> b
(cadar X) -> (car (cdr (car X))) -> (car (cdr 'a)) -> error
如果您有多个a
或d
,可以从cadr
示例中看到,您可以向后阅读。首先取参数的cdr
(d),然后从结果中取car
(a),依此类推,直到你到达第一个。