データ
Schemeで扱うデータは,
- simple data(単純データ)
- 記号
- 即値データ --- 真偽値,数値,文字列,文字
- compound data(複合データ)
- リスト
- ベクトル
- 記号
-
記号とは,その名前によって識別されるデータである.
例えば関数,変数は,その名前である関数名,変数名という記号で識別されている.
アルファベットの大文字と小文字は記号の名前としては区別されない.
記号は対応する一つの印字名(たいていのシステムでは名前の中のアルファベットの全てを小文字にしたもの)によって識別される.
> (define abc 3) abc > AbC 3 > (DefinE deF 1) def > (+ Def aBC) 4
記号をシステムに与えるには,クォートを用いる.> (quote x) x > (quote a-symbol) a-symbol
クォートをしないでシステムに記号名を入力すると,それが表す記号に対応するデータ(変数の値,関数データなど)を参照することになる.> (define x 1) x > x 1 ;; xという印字名をもつ変数の値 > a-symbol ==> error : unbound variable : a-symbol ;; a-symbolという変数は定義されていない
- 即値データ
- 入力そのものを値とするデータである.
- 真偽値
- #t -- true,真(正しい)
- #f -- false,偽(正しくない)
- 数値
- 整数,有理数,実数,複素数
- 文字列,文字
- 文字列は,"(ダブルクォーテーション)で囲まれた文字の列. 文字データは,「#\文字」で表現される.
- リスト
-
(データ1 データ2 ... )
のように括弧でくくられた(あらゆる種類の)データの列である. つまり各データが再びリストになっていてもよい.;; リストの例 (1 2 3 4) (a "this is a string" 34 +) (a b (c (d e) f) g (h) i) ;; 中身のない空リスト ( )
このようにリストは,その定義の中にそれ自体が現われる(再帰的な)構造を持つ. またそれぞれのデータを要素と呼ぶ. - ベクトル
-
#(データ1 データ2 ... )
のように表現されるデータ列である. 表現としてはリストとほぼ同様だが,システム内部での実現方法がリストとは異なる. 各要素の値の参照についてはベクトルの方が速いが,各要素操作(要素の追加,削除,置換など)に対する柔軟性については,リストの方が優れる. 一般的にはリストを用いることがほとんどである.