Scheme入門 第5章 変な数ではありません!
他のプログラミング言語を嗜んだ方ならお馴染みの変数ですが、変数ってなんじゃ?とか言ってる貴方。「変数」とは「変な数」ではありません、お間違い無きよう。「変わる数」とお読みください。変数は、変化する数なのです。
変数名。変数に名前を付けます。x
とか y
とか。Scheme では大文字小文字を区別しません。Hello
も HELLO
も hElLo
も同じです。ハイフン(マイナス記号)とかスラッシュも変数名に使えるので、line-number
といった変数名もOK。漢字変数名もDrSchemeでは使えます。
変数は (define 変数名 式) で定義します。4つくらい定義してみましょう。
(define x 10)
(define y 20)
(define z 30)
(define 漢字変数名 "Hello")
Scheme の変数は型を指定しませんで、数値でも文字列でもおよそ何でも格納出来ます。変数を使うときは、値を書く代わりに変数名を書けば良いです。
(display (+ x y))
DrScheme上段のエディタで変数を定義した後[実行]し、下段のインタプリタ(コンソール)でそれらの変数名を使って色々な計算をすることが出来る。 |
定義した変数の値を書き換えるときは set!
を使います。書き換えると、その時点から、変数の値は新しい値になります。
(define a 10)
(display a)
(newline)
(set! a 20)
(display a)
(newline)
この実行結果は次のように。
10
20
※ 何気なく出てきた newline
は改行を行う手続きです。
set!
のように最後に ! が付いてるのは、破壊的な動作を行う印です(紳士協定ですけど)。この場合は、変数の値を書き換えてしまって、以前の値はどこかへ消え去ってしまいます。破壊的な手続きは関数型言語に相応しくないので、なるべくなら使わないで済ませるのがエレガントと言えましょう。エレガントさなど、どうでもいい場合もありますけれど。
変数ばかりではネタが無くなってきたので、シンボルについてもここで説明することにします。
シンボルとは、簡単に言うと、変数名のことです。x
とか y
とかがシンボルです。シンボルは、20
のような数値や "Hello"
のような文字列と同列に扱われるScheme オブジェクト(※1)です。百聞は一見にしかずの諺。実際に例を見てください。
(define x 10)
(display x)
(newline)
(display 'x)
(newline)
実行すると次のように表示されます。
10
x
最初に表示された 10
は、変数 x
の値です。2番目に表示された x
は何でしょう?これがシンボルです。'x
のように名前の前にクォートを付けるとシンボルを得られます。シンボル x
は、変数 x
の値ではなく、x
という名前そのものです。次の例のように、定義されていない変数の名前でも、シンボルを得ることは出来ます。
(display 'Hello)
(newline)
(display 'HELLO)
(newline)
(display 'hElLo)
(newline)
実行結果:
Hello
HELLO
hElLo
DrSchemeでは、このようにシンボルは変数名と同じく、大文字小文字が区別されます(※2)。他にシンボルの特徴として、シンボルは eq?
やeqv?
で比較出来ます。また、文字列と異なり、その一部分だけ取り出すとか何文字目を書き換えるといった操作は出来ません。辞書順に大小関係を比較することも出来ません。シンボルは、その名前が一致するか異なるかだけが重要な場合に使うものだと考えてください。
例えば変数名というものは、その名前の一部が一致したところで何の意味もなく、何文字目を書き換えたり大小関係の比較など必要ありません。名前全体が一致するかどうかだけが重要です。
良く解らないなら、良く解らないでいいです。必要なければ使わないでしょうし、必要ならそのときに理解出来るでしょう。値がシンボルかどうかは手続き symbol?
で確認出来ます。
第5章・完
第6章へ
※1:オブジェクトとは元々、物、目標物、対象という意味の英単語。Schemeでは、扱う事が可能なデータは何もかも「オブジェクト」である。
※2:処理系に依るが、DrSchemeの場合は大文字小文字を区別する。
- DrScheme での Language Pack の選択
- Scheme の単純な式「(+ 3 2)」, 「(- 10 4)」
- Scheme の単純な式(括弧の入れ子)
- Scheme の単純な式 (DrScheme の定義ウインドウ)
- 関数 area-of-disk の定義と,関数適用
- 関数 area-of-disk,変数 PI の定義と,関数適用(1)
- 関数 area-of-disk,変数 PI の定義と,関数適用(2)
0 コメント:
コメントを投稿