nome do símbolo sem adicionar ao obarray

Sep 27 2020

Descobri que consultar o nome de um símbolo usando symbol-nameadiciona o 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

Minha preocupação é que isso incha obarraycom símbolos vazios (ou seja, nenhum valor ou definição de função). Existe

  1. algo como symbol-nameque não adiciona o ao obarray?
  2. uma maneira de limpar o obarray de símbolos "inúteis" (todas as células, exceto a célula do nome, estão vazias)?

Editar -

Acabei de descobrir que até mesmo avaliar um símbolo o adiciona ao obarray. Portanto, estou assumindo que esta linguagem (ou qualquer outro lisp) foi projetada de uma forma que você não precisa se preocupar com o tamanho obarray. Isso está correto?

Respostas

1 Drew Sep 28 2020 at 03:49

C-h f make-symbol:

make-symbol é uma função embutida no 'código-fonte C'.

(make-symbol NAME)

Retorne um símbolo não interno recém-alocado cujo nome é NAME.

Seu valor é nulo, e sua definição de função e lista de propriedades são nil. Esta função não altera o estado global, incluindo os dados de correspondência.

E como outros disseram nos comentários, você também pode internar um símbolo em um obarray diferente. Isso não resolve seu problema de inchaço de obarray. Mas isso não deveria ser um problema de qualquer maneira.

Você usa outro obarray como um namespace separado. Você pode ter um símbolo fooem vários obarrays. Os símbolos são diferentes / separados, com propriedades diferentes, etc.

Você pode ter um problema XY . Se você acha que sim, tente perguntar sobre algo que você está realmente tentando fazer.

Por exemplo, por que você acha que deseja / precisa "limpar o obarray de símbolos 'inúteis' (todas as células, exceto a célula do nome estão vazias)" ?