シンボル型
シンボル型とは、「一言で言うとシンボルとは、文字列をアドレスで管理するデータ型」らしい。 cf. 12. シンボル型 - もうひとつの Scheme 入門 Ruby のシンボルと同じようなものだと考えてよさそうだ。 シンボルを比較するには、アドレスを比較する eq? が使えるので、高速に比較することができる。なので、連想配列やハッシュ表のキーに使うといいようだ。 今までのエントリに出てきた中では、数値以外のアトムが実はシンボルだった。シンボルを使うにはクォートしてやらないといけない。そうでないと Scheme は変数として評価しようとする。
gosh> foo
*** ERROR: unbound variable: foo
Stack Trace:
_______________________________________
gosh> 'foo
foo
文字列とは違うことに注意。
gosh> (symbol? 'foo)
#t
gosh> (symbol? "foo")
#f
シンボルと文字列は相互に変換できる。文字列からシンボルへは string->symbol、シンボルから文字列へは symbol->string だ。
gosh> (string->symbol "Foo")
Foo
gosh> (symbol->string 'Foo)
"Foo"
処理系にもよるけど、文字列をシンボルに変換するとき小文字にしておかないと、同じつづりでも同じアドレスにならないらしい。
gosh> (eq? (string->symbol "Foo") 'Foo)
#t
同じアドレスでないと、これが #f になるわけだな。Gauche の場合は同じになるようだ。
