SICP一人勉強会(第1章)

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

大学院生の時に挫折したSICPに再チャレンジ!
基本的に毎週土曜にコツコツ読み進めよう。

今日は環境構築として、DrRacketをダウンロード。昔はDrSchemeだったのだけども。

0.0 環境構築

1.1 プログラムの要素

 この章で扱うデータは数値データのみである。
 そのため以降の議論では、この章の冒頭に記載してある強力な言語の持つ三つの仕掛けはそれぞれ

  • 基本式…数値
  • 組み合わせ法…数値を組み合わせた演算
  • 抽象化法…変数と数値の対応づける

に限定される。

1.1.1 式

 ここでは基本式としての整数の評価、および演算子と引数を組み合わせた式の評価を行っている。

 ここで利用されている+や-などの演算子も式であるため、以下のように評価することが可能である。数値の場合は評価した結果として数値を返すが、演算子の場合は、procedureを返す。

> +
#<procedure:+>
> -
#<procedure:->
1.1.2 名前と環境

 1.1.2では新しく変数と環境という概念が定義されている。

 ここでは変数とはある計算対象(数・演算子など)を指し示すものの別名である、と定義している。
 defineを用いることで変数名と、その変数の評価結果の対応を決めることにより、変数名を使って計算対象(例えば数値とか演算子とか)を指し示すことができる。よって評価結果をもたない変数というものは定義できない。
 そうした変数名と、その評価結果としての計算対象の組み合わせが環境である。
  

 演算子も同様にして定義できる。以下のようにplusとして演算子+を再定義して、plusを+の代わりに利用することも可能。

> (define plus +)
> plus
#<procedure:+>
> (plus 2 3)
5

 一般的には変数を「データを格納しておくメモリ領域の識別子」として定義されることが多い。この場合、そのメモリ領域に値が格納されていなければ、変数の評価はできない。