Árbol de copias de Common Lisp:¿A qué objetos se hará referencia en común entre el original y la copia?

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

  •  13-12-2019
  •  | 
  •  

Pregunta

Estoy leyendo Ceceo común práctico, y tiene una pregunta sobre Lisp COPY-TREE función.

El libro da el ejemplo de llamar

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

Después de explicarlo, el libro hace esta afirmación:

Cuando una celda cons en el original hace referencia a un valor atómico, el la celda cons correspondiente en la copia hará referencia al mismo valor.Por lo tanto, los únicos objetos referenciados en común por el árbol original y la copia producida por COPY-TREE son los números 5, 6 y el símbolo NADA.

Pero eso no tiene sentido para mí.Pensé todos los átomos Se compartiría entre el original y el nuevo.Por lo tanto, esperaba que 1, 2, 3, 4, 5, 6 y NIL se compartieran entre el original y la copia, y que los únicos "objetos nuevos" fueran todas las celdas CONS.

¿Cuál es la correcta y por qué?

Gracias.

¿Fue útil?

Solución

Reviso la versión web, una versión en pdf y la tapa dura.Los dos primeros están equivocados como usted dice.La tapa dura dice esto (el énfasis en negrita es mío):

Cuando una celda de contras en el original hacía referencia a un valor atómico, la celda de contras correspondiente en la copia hará referencia al mismo valor.Así, los únicos objetos a los que hace referencia en común el árbol original y la copia producida por COPY-TREE son los números 1-6, y el símbolo NIL.

Entonces el libro de tapa dura es correcto.

Otros consejos

Es un poco más complicado.

Se copiarán las celdas de contras.Normalmente, los objetos a los que hacen referencia las celdas de contras no se copiarán.

Pero hay una excepción.Datos como números fijos y caracteres se pueden almacenar en línea en celdas de contras (y espacios de estructura, espacios de clase, matrices).Estos tipos de datos no son necesariamente EQ.Por eso existe EQL.

La descripción es correcta, el ejemplo no. copy-tree devolvería el 1, 2 y 3 tal cual, copiando solo el cons células.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top