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))))
やね。