Árvore de cópia comum do Lisp:Quais objetos serão referenciados em comum pelo original e pela cópia?

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

  •  13-12-2019
  •  | 
  •  

Pergunta

eu estou lendo Lisp comum prático, e tenho uma pergunta sobre o Lisp COPY-TREE função.

O livro dá o exemplo de chamar

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

Depois de explicá-lo, o livro faz esta afirmação:

Onde uma célula contras no original referenciou um valor atômico, a célula contras correspondente na cópia referenciará o mesmo valor.Assim, os únicos objetos referenciados em comum pela árvore original e pela cópia produzida pela cópia são os números 5, 6 e o ​​símbolo nil.

Mas isso não faz sentido para mim.Eu pensei todos os átomos seria compartilhada entre o original e o novo.Portanto, eu esperava que 1, 2, 3, 4, 5, 6 e NIL fossem todos compartilhados entre o original e a cópia, e que os únicos “novos objetos” fossem todas as células CONS.

Qual está correto e por quê?

Obrigado.

Foi útil?

Solução

Verifico a versão web, uma versão em pdf e a capa dura.Os dois primeiros estão errados como você afirma.A capa dura afirma isso (a ênfase em negrito é minha):

Onde uma célula cons no original referenciou um valor atômico, a célula cons correspondente na cópia fará referência ao mesmo valor.Assim, os únicos objetos referenciados em comum pela árvore original e pela cópia produzida por COPY-TREE são os números 1-6, e o símbolo NIL.

Portanto, o livro de capa dura está correto.

Outras dicas

É um pouco mais complicado.

As células contras serão copiadas.Normalmente, os objetos referenciados pelas células cons não serão copiados.

Mas há uma exceção.Dados como fixnums e caracteres podem ser armazenados inline em células cons (e slots de estrutura, slots de classe, matrizes).Esses tipos de dados não são necessariamente EQ.É por isso que existe o EQL.

A descrição está correta, o exemplo não. copy-tree retornaria 1, 2 e 3 como estão, copiando apenas o cons células.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top