Дерево копирования Common Lisp:На какие объекты будут совместно ссылаться оригинал и копия?

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

  •  13-12-2019
  •  | 
  •  

Вопрос

я читаю Практический Common Lisp, и у вас есть вопрос о Лиспе COPY-TREE функция.

В книге приводится пример вызова

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

После объяснения этого в книге делается такое заявление:

В тех случаях, когда ячейка «Минусы» в исходной ссылке на атомное значение, соответствующая ячейка «Минусы» в копии будет ссылаться на то же значение.Таким образом, единственными объектами, на которые ссылается общее исходное дерево, и копия, созданная Copy-Tree, являются числа 5, 6 и символ ноль.

Но для меня это не имеет смысла.я думал все атомы будет разделен между оригиналом и новым.Поэтому я ожидал, что 1, 2, 3, 4, 5, 6 и NIL будут общими для оригинала и копии и что единственными «новыми объектами» будут все ячейки CONS.

Какой из них правильный и почему?

Спасибо.

Это было полезно?

Решение

Я проверяю веб-версию, версию PDF и жесткую крышку.Первые два неверны, как вы утверждаете.Твердое покрытие утверждает это (смелый акцент - мой):

Где в гобушке в исходном оригинале ссылается атомное значение, соответствующая госпожа в копии будет ссылаться на то же значение.Таким образом, единственные объекты, упомянутые в общем исходном дереве, и копией, создаваемой копией дерева, являются числами 1-6 , и символ Nil.

Так что книга жесткой обложки верна.

Другие советы

Это немного сложнее.

Шпосы клетки будут скопированы.Обычно объекты, которые проводятся миновые ссылки на клетки, не будут скопированы.

Но есть одно исключение.Такие данные, такие как Fixnums и символы, могут храниться встроенные в минусах клетки (и слоты структуры, слоты классов, массивов).Такие типы данных не обязательно являются уравнением.Вот почему есть EQL.

Описание верное, пример нет. copy-tree вернет 1, 2 и 3 как есть, копируя только cons клетки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top