『Scheme手習い』読書会 第8回

Scheme手習い』読書会の8回目です。範囲としては6章(P98〜P111)でした。

  • 6章 影法師
    • 算術式の確認:1や3や1+3などのアトム。
    • 関数numbered?の定義:算術式を解釈して、+,*,^以外に数だけを含むなら#tを返す。引数は中置記法の算術式。例:(3 + 4)を渡すと#t。
    • 中置記法なので、(car (cdr x))で演算子を、(car x)で第1オペランドを、(car (cdr (cdr x)))で第2オペランドを取り出す。
    • 関数valueの定義:算術式の自然な値を返す。例:(1 + 3)なら4。
    • 第7の戒律:性質を同じくするすべての構成部分について再帰すべし。いままで何度もやっているような気が……いまさら感が。
    • 前置記法に関数valueを書き換える。
    • 演算子、第1オペランド、第2オペランドの取り出し部分をそれぞれ関数化(operator, 1st-sub-exp, 2nd-sub-exp)する。
    • 第8の戒律:表現から抽象化するに際し、補助関数を使用すべし。その通りですね。operator等の関数化を見ると分かりやすい。
    • 数の表現を変更する方法について。()を0にする例を挙げている。空リストやリストとの区別がつかなくなるのでまずそう。→ダメでした。
    • 影法師に注意しなければなりません。

1日で1章進みました。前置、後置、中置、どれも表現の違いだけ。抽象化を図り補助関数で違いを吸収すると良い、とそんなところでしょうか。今日はここまでですね。

追記:『Scheme手習い』読書会 第9回