2009-06-04 2 views

Antwort

4

DrScheme hat nichts dagegen, Ihre cons -ing, weil cons kann mehr als nur Listen erstellen. Von der Referenz,

(cons a d) → pair? 
    a : any/c 
    d : any/c

was bedeutet, dass cons baut Paare. Es ist auch vollkommen legal

> (cons 1 2) 
(1 . 2) 

zu tun, die keine Liste ist, die aber immer noch Sie tun Aber irgendwie

> (car (cons 1 2)) 
1 
> (cdr (cons 1 2)) 
2 

läßt, das „leere Wort“ und die „leere Liste“ ist das gleiche Objekt , wie von

überprüft werden kann
> (eq? empty '()) 
#t 
1

Die Cdr des letzten Paares zeigt auf '(), die leere Liste.

+0

warum funktioniert (cons 'leer)? – unj2

+1

Alle Listen bestehen aus einer Reihe von Listen der Länge 2. Zum Beispiel ist (1 2 3) eigentlich eine Liste der Länge 2: Der erste Eintrag ist 1 und der zweite Eintrag ist (2 3). Diese innere Liste ist auch eine Liste der Länge 2: das erste Element ist 2 und das zweite Element ist (3). Dieser zweite Artikel ist auch eine Liste mit zwei Artikeln: der erste Artikel ist 3 und der zweite Artikel ist(). Also, cons ('a'()) gibt zurück ('a), denn das ist tatsächlich (' a. '()). –

1

Die Antwort auf alle Ihre Fragen finden Sie, wenn Sie das Symbol empty auswerten. Es ist definiert als '(), die leere Liste, und darauf verweist der letzte cdr. Überzeugen Sie sich selbst, versuchen Sie dies:

(cdr (list 1 2 3)) 
(cdr (cdr (list 1 2 3))) 
(cdr (cdr (cdr (list 1 2 3)))) 
+0

Obwohl es einen Teil meiner Frage beantwortet, habe ich gerade festgestellt, dass die CDR nicht leer zeigen muss. Ich könnte eine falsche Liste haben wie (a b. D). Danke trotzdem. – unj2