CAR,CDR,CADAR等的说明

时间:2012-10-28 19:57:03

标签: command scheme

有人可以给我一个基本的解释,说明carcdr在方案中的变化吗?

如果我是正确的,car将返回列表中的第一项。 cdr将返回不包含第一个元素的列表。

我对其他变体感到困惑,更具体地说是cadarcaddrcddr等等。

我说这是一个随机的例子:

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

2 个答案:

答案 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

如果您有多个ad,可以从cadr示例中看到,您可以向后阅读。首先取参数的cdr(d),然后从结果中取car(a),依此类推,直到你到达第一个。