定理証明手習い (82) 式の置き換え
(find-focus-at-direction dir e)
式e
の、dir
で指定された部分式
dir
がe
の適切な位置を示しているかはまったく気にしてない模様
'Q
って指定されたけどそもそもe
はif
じゃないとか
'3
って指定されたけど引数が2個しかないとか
そういうの
ところで、関数型プログラミングの関数に動詞が使われてるのはちょっと雰囲気に合わない気が
するんですがどうでしょうか
> (find-fucus-at-direction 'Q '(cons 'a 'b))
'a
(rewrite-focus-at-direction dir e1 e2)
式e
の、dir
で指定された部分式をe2
に置き換える
(focus-is-at-direction? dir e)
dir
が、式e
の正しい部分式を指しているか
たぶんこれでいったんチェックしてからfind-focus-at-direction
を使うんだな
関数名は「指定された方向にフォーカスがあるか?」って読めるけどちょっと違う気がする
この場合、自分が違っているとしか思えないけど
(focus-is-at-path? path e)
path
が、式e
の正しい部分式を指しているか
path
はdir
のリスト
(find-focus-at-path path e)
式e
の、path
で指定された部分式
(rewrite-focus-at-path path e1 e2)
式e
の、path
で指定された部分式をe2
に置き換える
少しややこしい
path
が'()
じゃないときのこの部分
(rewrite-focus-at-direction
(car path) e1
(rewrite-focus-at-path
(cdr path)
(find-focus-at-direction (car path) e1)
e2))
e1
の、(car path)
が指す部分式を、
e1
の、(car path)
が指す部分式の(cdr path)
が指す部分式をe2
で置き換えた式で
置き換える
(cons 'a (cons 'b 'c))
の(2 1)
が指す部分式を'd
で置き換えるとするなら
(cons 'a (cons 'b 'c))
の2
が指す部分式、つまり(cons 'b 'c)
を、
(cons 'b 'c)
の(1)
が指す部分式、つまり'b
を'd
で置き換えた式、つまり(cons 'd 'c)
で
置き換える
で(cons 'a (cons 'd 'c))
ができる、と
理解した