일반적인 LISP의 복사 트리 : 원본 및 사본이 공통으로 참조되는 객체는 무엇입니까?

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

  •  13-12-2019
  •  | 
  •  

문제

저는 실용적인 공통 lisp lisp의 generacodicicetagode 기능에 대해 질문이 있습니다.

이 책은

호출의 예를 제공합니다.
(copy-tree '( '(1 2) '(3 4) '(5 6)))
.

설명한 후이 책은이 진술을합니다 :

원래의 셀이 원자 값을 참조하는 위치는 복사본의 해당 셀 셀은 동일한 값을 참조합니다. 따라서 원래의 트리에 의해 공통으로 참조되는 유일한 개체와 복사 트리가 생성 한 복사본은 5, 6 및 기호입니다. nil.

그러나 그것은 나에게 이해가되지 않습니다.나는 모든 원자 은 원래와 새로운 사이에서 공유 될 것이라고 생각했습니다.따라서, 1, 2, 3, 4, 5, 6 및 NIL은 원래의 복사본간에 모두 공유 될 것이고, 유일한 "새로운 물체"가 모든 셀 셀 일 것입니다.

어느 것이 정확하고, 왜?

감사합니다.

도움이 되었습니까?

해결책

웹 버전, PDF 버전 및 하드 커버를 확인합니다.처음 두 개가 당신이 주에서 잘못되었습니다.하드 커버는이 (대담한 강조가 광산) :

원래 원본의 셀 셀이 원자 값을 참조하는 경우, 복사본의 해당 셀 셀은 동일한 값을 참조합니다.따라서 원래 트리에 의해 공통된 유일한 객체와 복사 트리에서 생성 된 복사본은 1-6 및 기호 nil입니다.

하드 커버 북이 정확합니다.

다른 팁

그것은 약간 더 복잡합니다.

정당 셀이 복사됩니다.일반적으로 ops 셀 참조가 복사되지 않습니다.

그러나 하나의 예외가 있습니다.FixNums 및 문자와 같은 데이터는 셀 셀 (및 구조 슬롯, 클래스 슬롯, 배열)에서 인라인으로 저장할 수 있습니다.이러한 데이터 유형은 반드시 EQ는 아닙니다.그래서 EQL이 있습니다.

설명이 정확합니다. 예제는 아닙니다. copy-tree 는 1, 2 및 3을 그대로 복사 할 것입니다.cons 셀.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top