Wenn ich eine Liste in Scheme mache, worauf zeigt die Cdr des letzten Paares? Ist es ein "leeres Wort" oder eine "leere Liste"? DrScheme stört nicht (cons 'a empty)
noch (cons 'a '())
. Was ist der Unterschied zwischen dem leeren Wort und der leeren Liste?Worauf weist das letzte Element in einer Liste in Schema hin?
Antwort
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
Die Cdr des letzten Paares zeigt auf '(), die leere Liste.
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))))
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
warum funktioniert (cons 'leer)? – unj2
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. '()). –