2009-11-14 4 views
1

Supposons que j'ai une struct:Scheme, obtenir le pointeur de struct pointu

(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)) 

Sous PLT Scheme, tout en ayant l'enfant dans ma main (et ne sachant pas que parent est le pointeur), est-il possible de trouver le noeud pointant sctuct sans connaître le parent?

Répondre

3

Non, ce n'est pas possible. Et en fait, si vous ne gardez pas une référence à l'objet parent quelque part, l'objet parent peut être récupéré. Tout objet dont il est prouvé qu'il n'est jamais joignable peut être supprimé à tout moment. Si vous ne stockez aucune référence à cet objet, il n'est pas accessible. Maintenant, il y a quelques options si vous voulez vraiment revenir aux parents. Vous pouvez enregistrer une référence à votre parent dans votre noeud enfant (vous devrez le définir après avoir créé votre parent). Une solution moins optimale, mais qui fonctionnerait si vous ne pouvez pas modifier les structures de données en question pour une raison quelconque, consisterait à conserver une liste de tous les nœuds que vous créez, puis à chercher dans cette liste pour celle qui avait un enfant était eq? au nœud en question. Ou vous pouvez faire la même chose, mais les enregistrer dans une table de hachage, avec la clé étant l'enfant et la valeur étant le parent (ou la liste des parents, s'il peut y en avoir plus d'un), pour plus d'efficacité. Je ne suis pas sûr si l'une de ces solutions fonctionnerait pour vous, car elles peuvent dépendre du niveau de langue que vous utilisez, si vous le faites dans une classe d'introduction et n'utilisez pas la langue complète.

0

Non, vous ne pouvez pas. Où avez-vous même eu l'idée que cela pourrait être possible?

+0

Peut-être qu'il pourrait y avoir un peu de "magie" derrière qui pourrait me fournir ce que je voulais en lisant de la mémoire ou autre :) – Hellnar

+1

Malheureusement, il n'y a pas de structure de données pour encoder la magie. Au moins aucun en connaissance commune. Seul Dieu sait ce que les serveurs Google fonctionnent ;-) – ddaa