<cl> (setq a 'b) B <cl> (eq a 'b) T <cl> (symbol-name 'a) "A"Lispでは,シンボルが読み込まれるとすでにそのシンボルが生成されたかどう かを必ずしらべます.シンボルはシンボル表というところに登録されており, その表を必ず調べるわけです.しかしシンボル表に登録しないシンボルを 作ることも可能になっています.そのシンボル表にシンボルを登録することを internするといいます.関数internで行ないます. シンボル表に登録しないシンボルを作るにはmake-symbol関数や#:のリードマ クロを使います.
<cl> (make-symbol "A") #:A <cl> (symbolp '#:a) T <cl> (setq a '#:a) #:A <cl> (eq a '#:a) NIL <cl> (eq a 'a) NIL <cl> (eq a '#:a) NIL <cl> (eq (intern '#:a) 'a) Tまた,空白を含むシンボルも定義できます.
<cl> (setq a '|This is a symbol.|) |This is a symbol.| <cl> (symbolp a) T <cl> (eq a '|This is a symbol.|) T <cl> (list a a) (|This is a symbol.| |This is a symbol.|) <cl> (length (list a a a)) 3シンボルのeqは,シンボルの名前が同じで同一のシンボル表に登録さ れているかどうかで判断されます.
<cl> '|A| ;; シンボルaと同じになります. A <cl> 'a A <cl> (eq 'a '|A|) T <cl> (symbol-name 'a) "A" <cl> (symbol-name '#:a) "A" <cl> (symbol-name '|A|) "A" <cl> (symbol-name '|This is a symbol.|) "This is a symbol." <cl> (eq 'a '#:a) NIL <cl> 'This\ is\ a\ symbol. |THIS IS A SYMBOL.| <cl> (eq 'This\ is\ a\ symbol. '|THIS IS A SYMBOL.|) T <cl> #:|THIS IS A SYMBOL.| <cl> (eq '#:This\ is\ a\ symbol. '|THIS IS A SYMBOL.|) NIL <cl> (eq (make-symbol "THIS IS A SYMBOL.") '|THIS IS A SYMBOL.|) NIL <cl> (eq (intern (make-symbol "THIS IS A SYMBOL.")) '|THIS IS A SYMBOL.|) T