nom-symbole sans ajouter à obarray
J'ai découvert que l'interrogation du nom d'un symbole en utilisant symbol-nameajoute le symbole à obarray.
(intern-soft "random-name") ; gives nil
(symbol-name 'random-name) ; adds random-name to obarray, gives "random-name" (string).
(intern-soft "random-name") ; gives random-name
Ma préoccupation est que cela gonfle obarrayavec des symboles vides (c'est-à-dire aucune valeur ou définition de fonction). Y a-t-il
- quelque chose comme
symbol-namequi n'ajoute pas le à l'obarray? - un moyen d'effacer le tableau des symboles "inutiles" (toutes les cellules autres que la cellule de nom sont vides)?
Modifier -
Je viens de découvrir que même l'évaluation d'un symbole l'ajoute au obarray. Je suppose donc que ce langage (ou tout autre lisp) est conçu de manière à ne pas vous inquiéter de la taille de obarray. Est-ce correct?
Réponses
C-h f make-symbol:
make-symbolest une fonction intégrée au «code source C».
(make-symbol NAME)Renvoie un nouveau symbole non interverti dont le nom est
NAME.Sa valeur est void, et sa définition de fonction et sa liste de propriétés le sont
nil. Cette fonction ne change pas l'état global, y compris les données de correspondance.
Et comme d'autres l'ont dit dans les commentaires, vous pouvez également interner un symbole dans un autre obarray. Cela ne résout pas votre problème de ballonnements obarray. Mais cela ne devrait pas poser de problème de toute façon.
Vous utilisez un autre obarray comme espace de noms séparé. Vous pouvez avoir un symbole foodans plusieurs obarrays. Les symboles sont différents / séparés, avec des propriétés différentes, etc.
Vous avez peut-être un problème XY . Si vous pensez que oui, essayez plutôt de poser des questions sur quelque chose que vous essayez vraiment de faire.
Par exemple, pourquoi pensez-vous que vous voulez / devez "effacer le tableau des symboles" inutiles "(toutes les cellules autres que la cellule de nom sont vides)" ?