假设我有一个这样的结构:
(define-struct node (value next))
;and making 2 nodes, parent pointing to child as next.
(define child (make-node 2 null))
(define parent (make-node 1 child))
根据PLT计划,虽然手中有孩子(并且不知道父母是指针),是否有可能在不知道父母的情况下找到指向节点sctuct?
答案 0 :(得分:3)
不,这是不可能的。实际上,如果您不在任何地方保留对父对象的引用,则可以对父对象进行垃圾回收。任何可以证明永远无法访问的对象都可以随时删除。如果您没有在任何地方存储对该对象的引用,则无法访问它。
现在,如果你确实想要回到父母那里,有几种选择。您可以在子节点中保存对父项的引用(您必须在创建父项后设置它)。一个不太理想的解决方案,但如果由于某种原因无法更改有问题的数据结构,那么它将会保留您创建的所有节点的列表,然后在该列表中搜索具有子节点的那个节点。对于有问题的节点是eq?
。或者您也可以这样做,但是将它们保存在哈希表中,其中键是子项,值是父项(或父项列表,如果可以有多个),以提高效率。我不确定这些解决方案是否适用于您,因为它们可能取决于您使用的语言级别,如果您在介绍性课程中这样做而不使用完整语言。
答案 1 :(得分:0)