next up previous
Next: 8.3 リスト Up: 8 CommonLispのデータとその比較手続き Previous: 8.1.4 複素数(complex number)

8.2 シンボル

シンボルとして同じかどうかはeqで比較することができます.
<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


generated through LaTeX2HTML. M.Inaba 平成18年5月7日