シンボルを表すクラスです。
|name|
¶[R7RS] シンボルの定義では通常許されないような文字を使った妙な名前のシンボルを表記するのに 使う構文です。16進数エスケープ表記を含めることもできます。
;; 空白を名前に含むシンボル '|this is a symbol| ⇒ |this is a symbol| ;; Unicodeコードポイントを、バックスラッシュとxからなるエスケープに続けて ;; 書くこともできます。セミコロンで終端します。 '|\x3bb;| ⇒ λ
インタプリタが大文字小文字を区別しないモードで走っている場合は、 大文字を含むシンボルを表記するときにも使えます (大文字小文字の区別参照)。
#:name
¶「インターンされていない」シンボルを表記します。インターンされていないシンボルは
gensym
かstring->uninterned-symbol
で作ることができます。
インターンされていないシンボルは、良く伝統的なマクロで
変数衝突を避けるために使われます。インターンされていないシンボルは
内部のシンボルのテーブルに登録されないため、同じ名前のシンボルでも
eq?
になりません。
(eq? '#:foo '#:foo) ⇒ #f (eq? '#:foo 'foo) ⇒ #f
インターンされていないシンボルが含まれるS式を、
シンボルの同一性を保って表示するには、
write-shared
を使います。
(write-shared (let1 s '#:foo (list s s))) ⇒ prints (#0=#:foo #0#) (write-shared (let ((s '#:foo) (t '#:foo)) (list s t s t))) ⇒ prints (#0=#:foo #1=#:foo #0# #1#)
[R7RS base]
objがシンボルなら#t
を返します。
(symbol? 'abc) ⇒ #t (symbol? 0) ⇒ #f (symbol? 'i) ⇒ #t (symbol? '-i) ⇒ #f (symbol? '|-i|) ⇒ #t
シンボルsymbolがインターンされていれば#t
を、
そうでなければ#f
を返します。シンボルでないものが渡された場合はエラーとなります。
[R7RS base]
全ての引数はシンボルでなければなりません。引数のどの二つの組み合わせを取っても
それがeq?
である時に限り、#t
が返ります。
[R7RS base] symbolの名前を文字列で返します。返される文字列は変更不可です。
(symbol->string 'foo) ⇒ foo
[R7RS base] 文字列stringを名前に持つシンボルを返します。
(string->symbol "a") ⇒ a (string->symbol "A") ⇒ A (string->symbol "weird symbol name") ⇒ |weird symbol name|
string->symbol
と似ていますが、作られたシンボルはインターンされません。
(string->uninterned-symbol "a") ⇒ #:a
インターンされてない、新しいシンボルを作って返します。
返されるシンボルは、他のシンボルとは決してeq?
にならないことが保証されます。
prefixが与えられた場合は、それは文字列でなければならず、
それが作られるシンボルのプレフィクスに使われます。これは主としてデバッグを
容易にするためのものです。
symbolとprefixは共にシンボルでなければなりません。
prefixがsymbolの先頭部分にマッチした場合、
symbolからマッチ部分を取り除いた名前を持つシンボルを返します。
マッチしない場合は#f
を返します。
(symbol-sans-prefix 'foo:bar 'foo:) ⇒ bar (symbol-sans-prefix 'foo:bar 'baz:) ⇒ #f
objsの文字列表記をつなげた名前を持つシンボルを返します。
最初の引数が真偽値の場合は、最初の形式と解釈されます。interned?引数は 結果のシンボルがインターンされているかどうかを指定します。
それ以外の引数はそれぞれ次のとおり変換されます:キーワードであれば
(先頭の:
を含む)名前に、それ以外はx->string
を適用した結果に。
(キーワードを特別扱いするのは、キーワード-シンボル統合の後でも動作が
変わらないようにするためです。詳しくはキーワードとシンボルの統合を
参照。)
これは、Biglooにある同名の手続きの上位互換になっています。Bigloo版は シンボルのみを引数に許し、また結果は常にインターンされます。
(symbol-append 'ab 'cd) ⇒ abcd (symbol-append 'ab ':c 30) ⇒ ab:c30 (symbol-append #f 'g 100) ⇒ #:g100