obarray'e eklemeden sembol-adı

Sep 27 2020

Kullanarak bir sembolün adını sorgulamanın sembolü symbol-nameeklediğini öğrendim 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

Benim endişem, bunun obarrayboş sembollerle şişmesi (yani değer veya işlev tanımı yok). Var

  1. böyle bir şey symbol-nameobarray'e eklemeyen?
  2. "işe yaramaz" (isim hücresi dışındaki tüm hücreler boştur) sembollerin sırasını temizlemenin bir yolu mu?

Düzenle -

Bir sembolü değerlendirmenin bile onu obarray. Bu yüzden bu dilin (veya herhangi bir lisp'in) boyutu hakkında endişelenmenize gerek kalmayacak şekilde tasarlandığını varsayıyorum obarray. Bu doğru mu?

Yanıtlar

1 Drew Sep 28 2020 at 03:49

C-h f make-symbol:

make-symbol 'C kaynak kodunda' yerleşik bir işlevdir.

(make-symbol NAME)

Adı olan yeni tahsis edilmiş stajsız bir sembolü döndür NAME.

Değeri geçersizdir ve işlev tanımı ve özellik listesi vardır nil. Bu işlev, maç verileri dahil olmak üzere genel durumu değiştirmez.

Ve diğerlerinin yorumlarda söylediği gibi, bir sembolü farklı bir obarray içinde de yerleştirebilirsiniz. Bu, obarray şişkinlik probleminizi çözmez. Ama yine de problemsiz olmalı.

Ayrı bir ad alanı olarak başka bir obarray kullanırsınız. fooBirden çok obarrayde bir sembolünüz olabilir . Semboller farklı / ayrı, farklı özelliklere sahip, vb.

Bir XY sorununuz olabilir . Öyle düşünüyorsanız, gerçekten yapmaya çalıştığınız bir şeyi sormaya çalışın.

Örneğin, neden "'yararsız' (isim hücresi dışındaki tüm hücreler boştur) sembollerin sırasını temizlemek istediğiniz / buna ihtiyaç duyduğunuzu düşünüyorsunuz ?