شجرة نسخ اللثغة الشائعة:ما هي الكائنات التي سيتم الإشارة إليها بشكل مشترك بين الأصل والنسخة؟
-
13-12-2019 - |
سؤال
انا اقرأ اللثغة المشتركة العملية, ، ولديك سؤال حول Lisp's COPY-TREE
وظيفة.
ويضرب الكتاب مثال الدعوة
(copy-tree '( '(1 2) '(3 4) '(5 6)))
وبعد أن أوضح ذلك جاء في الكتاب ما يلي:
عندما تشير خلية Cons في القيمة الذرية الأصلية ، ستشير خلية Cons المقابلة في النسخة إلى نفس القيمة.وبالتالي ، فإن الكائنات الوحيدة المشتركة بين الشجرة الأصلية والنسخة التي تنتجها شجرة النسخ هي الأرقام 5 و 6 والرمز لا شيء.
لكن هذا لا معنى له بالنسبة لي.اعتقدت جميع الذرات سيتم تقاسمها بين الأصلي والجديد.لذلك، توقعت أن تتم مشاركة 1، 2، 3، 4، 5، 6 وNIL بين الأصل والنسخة، وأن "الكائنات الجديدة" الوحيدة ستكون جميع خلايا CONS.
أيهما هو الصحيح، ولماذا؟
شكرًا.
المحلول
يمكنني التحقق من إصدار الويب وإصدار PDF والغطاء الصلب.أول اثنين مخطئين كما تفعل.الدول الغطاء الصلب هذا (التركيز الجريء هو لي):
حيث تشير خلية سلبيات في الأصل إلى القيمة الذرية، ستظهر خلية السلبيات المقابلة في النسخة نفس القيمة.وبالتالي، فإن الكائنات الوحيدة المرجعية المشتركة بين الشجرة الأصلية والنسخة الناتجة عن شجرة النسخ هي الأرقام 1-6 ، والرمز nil.
حتى كتاب الغطاء الصلب هو الصحيح.
نصائح أخرى
هو أكثر تعقيدا قليلا.
سيتم نسخ خلايا السلبيات.عادة ما تكون الكائنات لن يتم نسخ مراجع خلايا السلبيات.
ولكن هناك استثناء واحد.يمكن تخزين البيانات مثل fixnums والشخصيات مضمنة في خلايا سلبيات (وفتحات هيكل، فتحات الطبقة، صفائف).أنواع البيانات هذه ليست بالضرورة EQ.لهذا السبب هناك EQL.
الوصف صحيح، والمثال ليس كذلك. copy-tree
سيعيد 1 و 2 و 3 كما هي، وينسخ فقط cons
الخلايا.