For Development HEAD DRAFTSearch (procedure/syntax/module):

6.7 シンボル

Builtin Class: <symbol>

シンボルを表すクラスです。

Reader Syntax: |name|

[R7RS] シンボルの定義では通常許されないような文字を使った妙な名前のシンボルを表記するのに 使う構文です。16進数エスケープ表記を含めることもできます。

;; 空白を名前に含むシンボル
'|this is a symbol| ⇒ |this is a symbol|

;; Unicodeコードポイントを、バックスラッシュとxからなるエスケープに続けて
;; 書くこともできます。セミコロンで終端します。
'|\x3bb;| ⇒ λ

インタプリタが大文字小文字を区別しないモードで走っている場合は、 大文字を含むシンボルを表記するときにも使えます (大文字小文字の区別参照)。

Reader Syntax: #:name

「インターンされていない」シンボルを表記します。インターンされていないシンボルは gensymstring->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#)
Function: symbol? obj

[R7RS base] objがシンボルなら#tを返します。

(symbol? 'abc)     ⇒ #t
(symbol? 0)        ⇒ #f
(symbol? 'i)       ⇒ #t
(symbol? '-i)      ⇒ #f
(symbol? '|-i|)    ⇒ #t
Function: symbol-interned? symbol

シンボルsymbolがインターンされていれば#tを、 そうでなければ#fを返します。シンボルでないものが渡された場合はエラーとなります。

Function: symbol=? a b c …

[R7RS base] 全ての引数はシンボルでなければなりません。引数のどの二つの組み合わせを取っても それがeq?である時に限り、#tが返ります。

Function: symbol->string symbol

[R7RS base] symbolの名前を文字列で返します。返される文字列は変更不可です。

(symbol->string 'foo) ⇒ foo
Function: string->symbol string

[R7RS base] 文字列stringを名前に持つシンボルを返します。

(string->symbol "a") ⇒ a
(string->symbol "A") ⇒ A
(string->symbol "weird symbol name") ⇒ |weird symbol name|
Function: string->uninterned-symbol string

string->symbolと似ていますが、作られたシンボルはインターンされません。

(string->uninterned-symbol "a") ⇒ #:a
Function: gensym :optional prefix

インターンされてない、新しいシンボルを作って返します。 返されるシンボルは、他のシンボルとは決してeq?にならないことが保証されます。 prefixが与えられた場合は、それは文字列でなければならず、 それが作られるシンボルのプレフィクスに使われます。これは主としてデバッグを 容易にするためのものです。

Function: symbol-sans-prefix symbol prefix

symbolprefixは共にシンボルでなければなりません。 prefixsymbolの先頭部分にマッチした場合、 symbolからマッチ部分を取り除いた名前を持つシンボルを返します。 マッチしない場合は#fを返します。

(symbol-sans-prefix 'foo:bar 'foo:) ⇒ bar
(symbol-sans-prefix 'foo:bar 'baz:) ⇒ #f
Function: symbol-append interned? objs …
Function: symbol-append objs …

objsの文字列表記をつなげた名前を持つシンボルを返します。

最初の引数が真偽値の場合は、最初の形式と解釈されます。interned?引数は 結果のシンボルがインターンされているかどうかを指定します。

それ以外の引数はそれぞれ次のとおり変換されます:キーワードであれば (先頭の:を含む)名前に、それ以外はx->stringを適用した結果に。 (キーワードを特別扱いするのは、キーワード-シンボル統合の後でも動作が 変わらないようにするためです。詳しくはキーワードとシンボルの統合を 参照。)

これは、Biglooにある同名の手続きの上位互換になっています。Bigloo版は シンボルのみを引数に許し、また結果は常にインターンされます。

(symbol-append 'ab 'cd) ⇒ abcd
(symbol-append 'ab ':c 30) ⇒ ab:c30
(symbol-append #f 'g 100) ⇒ #:g100


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT