Схема, получающая указатель из остроконечной структуры - PullRequest
1 голос
/ 14 ноября 2009

Предположим, у меня есть такая структура:

(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, имея в руках дочерний элемент (и не зная, что родительский указатель является указателем), возможно ли найти схему указательного узла, не зная родителя?

Ответы [ 2 ]

3 голосов
/ 14 ноября 2009

Нет, это невозможно. И на самом деле, если вы нигде не храните ссылку на родительский объект, родительский объект может быть подвергнут сборке мусора. Любой объект, который может оказаться недоступным, может быть удален в любое время. Если вы нигде не сохраняете ссылку на этот объект, то она недоступна.

Теперь, есть пара вариантов, если вы действительно хотите вернуться к родителям. Вы можете сохранить ссылку на своего родителя в своем дочернем узле (вы должны будете установить его после создания своего родителя). Менее оптимальное решение, но которое будет работать, если по какой-то причине вы не сможете изменить рассматриваемые структуры данных, будет вести список всех созданных вами узлов, а затем искать в этом списке тот, у которого есть дочерний элемент был eq? для рассматриваемого узла. Или вы можете сделать то же самое, но сохранить их в хеш-таблице, где ключ - это дочерний элемент, а значение - родитель (или список родителей, если их может быть несколько), для большей эффективности. Я не уверен, что какое-либо из этих решений будет работать для вас, поскольку они могут зависеть от уровня языка, который вы используете, если вы делаете это во вводном классе и не используете полный язык.

0 голосов
/ 14 ноября 2009

Нет, вы не можете. Откуда вы вообще взяли, что это возможно?

...