第1章2日目です。
1.1.2 名前と環境
プログラム言語の重要な点は、名前を使って計算オブジェクトを指す手段を用意することである。オブジェクトを値(value)とする変数(variable)を識別するものが名前である。
2つ目の文がすんなり理解出来なかった。5分以上考えているけど、噛み砕けた感じがしない。名前で識別出来る変数の値は計算オブジェクトの計算結果ではなく、計算オブジェクトそのもの、ということではないかと思う。計算結果が必要になった時点ではじめて実際の値を求める処理が行われる。名前を指定してから(つい、「変数に代入してから」と書きそうになったが、なにか間違っている気がする)、実際に利用されるまでの間に計算オブジェクトを変更することができる。例えば、足し算だったところを、引き算にしたりとか。あと、変数と名前が別のものとして扱われている。C言語などだと「変数名」となるが、Lispでは名前はあくまでラベルであり、オブジェクトを格納する変数とは1:1とは限らないのではないかと思う。1つの変数に複数の名前を付けることができる。すべての変数が参照型なのではないか。
レッツ、検証。
gosh> (define a 1) a gosh> (define b 2) b gosh> (define c a) c gosh> a 1 gosh> b 2 gosh> c 1 gosh> (define a 3) a gosh> a 3 gosh> b 2 gosh> c 1
検証2。
gosh> (define func (+ 1 2)) func gosh> (define func2 (+ func func)) func2 gosh> func 3 gosh> func2 6 gosh> (define func (+ 2 3)) func gosh> func 5 gosh> func2 6
見当違いでした。ほんとうにありがとうございました。続きを読みます。
簡単な計算オブジェクトに名前を付け、その名前を使ってさらに複雑な計算オブジェクトを作ることによって積み上げていけるということが書かれており、最後に環境の説明がありました。
値と記号の対応づけ、後にそれが取り出せるためには、解釈系は名前とオブジェクトの対を見失わないため、何か記憶を保持していることに他ならないことは明らかである。この記憶を環境(environment)という。
以上、短いですが、今日の分終わり。