シンボル型とは、「一言で言うとシンボルとは、文字列をアドレスで管理するデータ型」らしい。
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 の場合は同じになるようだ。