obarray'e eklemeden sembol-adı
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
- böyle bir şey
symbol-nameobarray'e eklemeyen? - "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
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 ?