2012-10-28 120 views
7

請問有人可以給我一個關於carcdr在Scheme中變化的基本解釋嗎?CAR,CDR,CADAR等的解釋

如果我沒錯,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。但我不知道如何推斷/cdr的任何其他變化,如cadar

回答

15

您可以通過分析他們的名字推斷這些功能的含義:

的第一個字母之間(「C」)和最後一個(「R」),一個「A」表示「的汽車」和'd'表示「cdr」。

所以:

  • cadr是 「CDR的車」,
  • cddr是CDR的CDR,
  • cadar是 「汽車的CDR的汽車」(因此該參數必須是列表)的列表,
+0

這真的有幫助!我從來沒有想過在c和r之間尋找,然後尋找a或d。至少這對我來說最有意義。 –

4

最簡單的方法是將它進入一個方案解釋:

(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),依次類推,直到找到第一個。