Common Lisp's Copy-Tree: quali oggetti saranno referenziati in comune dall'originale e dalla copia?

StackOverflow https://stackoverflow.com//questions/12716371

  •  13-12-2019
  •  | 
  •  

Domanda

Sto leggendo Pratico comune lisp e avere una domanda sulla funzione COPY-TREE di Lisp.

.

Il libro fornisce l'esempio della chiamata

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

Dopo averlo spiegato, il libro rende questa affermazione:

.

dove una cella contro nell'originale ha fatto riferimento un valore atomico, il La cella dei contro corrispondente nella copia si rivolgerà allo stesso valore. Pertanto, gli unici oggetti referenziati in comune dall'albero originale e La copia prodotta da copia-albero è i numeri 5, 6 e il simbolo Nil.

Ma questo non ha senso per me.Ho pensato tutti gli atomi sarebbero condivisi tra l'originale e il nuovo.Pertanto, mi aspettavo che 1, 2, 3, 4, 5, 6 e n. Sarebbero stati condivisi tra l'originale e la copia, e che gli unici "nuovi oggetti" sarebbero tutte le celle dei contro.

quale è corretto e perché?

Grazie.

È stato utile?

Soluzione

Controllo la versione web, una versione PDF e il coperchio rigido.I primi due sono sbagliati come dichiari.La copertura rigida lo afferma questo (audace enfasi è mio):

.

Quando una cella Contro nell'originale ha fatto riferimento a un valore atomico, la corrispondente cella Contro nella copia si rivolgerà allo stesso valore.Pertanto, gli unici oggetti referenziati in comune dall'albero originale e dalla copia prodotti da copia-albero sono i numeri 1-6 e il simbolo Nil.

Quindi il libro di copertura rigido è corretto.

Altri suggerimenti

è leggermente più complicato.

Le celle Contro verranno copiate.Tipicamente gli oggetti che i riferimenti delle celle dei contro non saranno copiati.

Ma c'è un'eccezione.I dati come i fixnums e i caratteri possono essere memorizzati in linea nelle celle delle contro (e slot strutturali, slot di classe, array).Tali tipi di dati non sono necessariamente eq.Ecco perché c'è EQL.

La descrizione è corretta, l'esempio non è. copy-tree restituirebbe il 1, 2 e 3 come è, copiando solo ilcons Cells.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top