símbolo-nombre sin agregar a obarray
Descubrí que consultar el nombre de un símbolo usando symbol-nameagrega el símbolo a 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
Mi preocupación es que esto se hincha obarraycon símbolos vacíos (es decir, sin valor o definición de función). Está ahí
- algo como
symbol-nameque no agrega el al obarray? - ¿una forma de borrar la obarray de símbolos "inútiles" (todas las celdas excepto la celda de nombre están vacías)?
Editar -
Me acabo de enterar de que incluso evaluar un símbolo lo agrega al archivo obarray. Así que supongo que este lenguaje (o cualquier lisp) está diseñado de tal manera que no tienes que preocuparte por el tamaño obarray. ¿Es esto correcto?
Respuestas
C-h f make-symbol:
make-symboles una función incorporada en el 'código fuente C'.
(make-symbol NAME)Devuelve un símbolo no internado recién asignado cuyo nombre es
NAME.Su valor es nulo y su definición de función y lista de propiedades son
nil. Esta función no cambia el estado global, incluidos los datos del partido.
Y como han dicho otros en los comentarios, también puede internar un símbolo en una orden diferente. Eso no resuelve su problema de hinchazón de la matriz. Pero eso no debería ser un problema de todos modos.
Utiliza otro obarray como un espacio de nombres separado. Puede tener un símbolo fooen múltiples obarrays. Los símbolos son diferentes / separados, con propiedades diferentes, etc.
Puede que tenga un problema XY . Si cree que sí, intente preguntar sobre algo que realmente está tratando de hacer.
Por ejemplo, ¿por qué cree que quiere / necesita "borrar la matriz de símbolos 'inútiles' (todas las celdas excepto la celda de nombre están vacías)" ?