「第2章 データによる抽象の構築」で提示されている問題を解いています。
目次
問題
2.73
まず、ここはgetやputというテーブルに対する操作ができないと実行しようがないから、3.3.3からプログラムをコピーしてきた。これでget/putができるようになった。
さて、まずはa。
a.
(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp) (if (same-variable? exp var) 1 0))
(else ((get 'deriv (operator exp)) (operands exp)
var))))
何をしたかというと、各演算子における処理を演算子の型タグによるテーブルを使用し、演算をデータ主導にしている。ただしnumber?やvariable?は型タグを持たない(持てない)から、テーブルには含められない。