1.1.1 ~ 1.1.3
1 手続きによる抽象の構築
抽象化は、一般的に計算機科学においては対象に関する詳細を捨象すること(Wikipedia)
1.1 プログラムの要素
抽象化:合成物に名前をつけ、単一のものとして扱う。
例:
一番単純な抽象化は、defineを用いて、名前と数の対応付け(1.1.2)
次に複雑な抽象化は、defineを用いて、名前と合成演算の対応付け(1.1.4)
1.1.1 式
式を入力すると解釈系は評価結果の値を返す。
式が数の場合は、評価結果として数値を返す。
式を評価するとあるが、評価方法に関しての記載はない。
入れ子構造の組み合わせ式を含めた式の具体的な評価方法は1.1.3である。
486
486
上は非常にシンプルだが、式を評価してその値を印字するという解釈系のまさに本質的な動作をさしている、ということに注意!
1.1.2 名前と環境
名前とは変数を識別するもの。
変数を評価するとオブジェクトを返す(オブジェクト例として、例えば数値)
ハードウェア的には、オブジェクトはメモリのアドレスに格納されている。このアドレス(変数)を識別するものが名前となる。
defineが出てくるが、defineは特殊形式でその評価したときの値は実装に依存。
ここでは名前を付ける対象の計算オブジェクトとして数を用いているが、後に手続きもその対象となる。LISPの1節冒頭の手続きとデータを区別しないことの一例。
- 計算オブジェクトとして数に名前をつける 1.1.2参照
- 計算オブジェクトとして手続きに名前をつける(引数はない) 1.1.2参照
- 計算オブジェクトとして手続きにな名前をつける(引数あり) 1.1.4参照
の3通りが存在する。