Frage

Ich lese Praktisches Common Lisp, und habe eine Frage zu Lisps COPY-TREE Funktion.

Das Buch gibt das Beispiel des Aufrufs

(copy-tree '( '(1 2) '(3 4) '(5 6)))

Nachdem es erklärt wurde, macht das Buch diese Aussage:

Wenn eine Widerspruchszelle im Original auf einen atomaren Wert verweist, wird die die entsprechende Cons-Zelle in der Kopie verweist auf denselben Wert.Somit sind die einzigen Objekte, auf die der ursprüngliche Baum gemeinsam verweist, und die von COPY-TREE erzeugte Kopie sind die Nummern 5, 6 und das Symbol NULL.

Aber das ergibt für mich keinen Sinn.Ich dachte alle Atome würde zwischen dem Original und dem Neuen geteilt werden.Deshalb habe ich das erwartet 1, 2, 3, 4, 5, 6 und NULL würde alle zwischen dem Original und der Kopie geteilt werden, und die einzigen "neuen Objekte" wären alle nachteiligen Zellen.

Welches ist richtig und warum?

Danke.

War es hilfreich?

Lösung

Ich überprüfe die Web-Version, eine PDF-Version und die harte Abdeckung.Die ersten beiden sind falsch, wenn Sie angeben.Die harte Abdeckung heißt, dies (mutige Betonung ist meine):

Wenn eine CONS-Zelle im Original einen atomaren Wert aufzeichnet, referenziert die entsprechende CONS-Zelle in der Kopie denselben Wert.Somit sind die einzigen Objekte, die von dem Originalbaum gemeinsam genannt werden, und die vom Kopierbaum erzeugte Kopie sind die Zahlen 1-6 und das Symbol Null.

Das harte Cover-Buch ist also korrekt.

Andere Tipps

Es ist etwas komplizierter.

Die CONS-Zellen werden kopiert.In der Regel werden die Objekte, die die Zellenverweise nicht kopiert werden, nicht kopiert werden.

Aber es gibt eine Ausnahme.Daten wie Fixnums und Zeichen können in CONS-Zellen (und Strukturschlitze, Klassensteckplätze, Arrays) inline gespeichert werden.Solche Datentypen sind nicht unbedingt q.Deshalb gibt es EQL.

Die Beschreibung ist korrekt, das Beispiel nicht. copy-tree würde die 1, 2 und 3 unverändert zurückgeben und nur die kopieren cons Hautzellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top