value関数(その1)

データとしてのリストを受け取り、それをプログラムとして解釈して評価するvalue関数をつくろうじゃないか、というお話。
たとえば、

(car (quote (a b)))

というリスト(関数適用じゃない、データとしてのリスト)に関して、

(value '(car quote (a b)))

の値が

a

になるようなvalue関数。
つまり、Schemeインタプリタを実装しよう、というわけね。

実はこのvalue関数、6章で途中まで作ってる。ただし、6章のときは算術演算に限定していたけどね。
んで、いろんなS式(valueの引数となるデータ)に関して

  • そのS式のタイプ(「型」っていうと誤解を招きそうなので。この「タイプ」が何かは定義されていない)
  • そのS式にvalueを適用したときの評価結果

に関して、羅列してあることをまとめておく。

空欄のところは言及されなかったところ。
んで、「全部で6個のタイプがあるみたいだねー」だと。


今日はここまで。分からないこといっぱい。

  • consのタイプと、quoteやcondのタイプが違うのはなぜなんだろう?
  • (add1 6)のタイプに言及しないのはなぜだろう?
  • そもそも「タイプ」って何だろう?

相変わらず、「で?」「だから?」って言いたくなる内容だ。

訂正(2009/10/20)

(value '(car quote (a b)))

じゃなくて

(value '(car (quote (a b))))

やね。