kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Reasoned Schemer (40) 8章 未体験ゾーン3

戻って本体 (logo n b q r)
これはcondeなので1行ずつ見ていく
再帰はしてないな

((== '() q) (≦o n b) (+o r '(1) n))
n <= bならqが0でrn - 1、と読むとわかりやすい気はするんだけど
ほんとはq == 0n <= br + 1 == nならば成功、って読むべきなんだろうな
だいたいわかる
しかし
n == bならqが1でrが0になるべきだと思うんだけど
なんでn <= bになってるの
n < bのほうがいいんじゃないの
たとえばnが5、qが0、rが4でも成功しそうだけど
その場合はqが1でrが0になるべきでは
成功しないの?

((== '(1) q) (>1o b) (=lo n b) (+o r b n)))
(=lo n b)をどう読むか
nbがたがいに2倍未満、みたいな感じ?
bが1より大きい、つまり2以上で
q1だからいろいろ総合すると
bが1より大きくて、nbの2倍未満ならqは1でrn - b
って読んだらいいかな

((== '(1) b) (poso q) (+o r '(1) n))
bが1ならqは正ならなんでもよくてrn - 1
そうですね

((== '() b) (poso q) (== r n))
bが0ならqは正ならなんでもよくてrn
なんかちゃんと条件網羅できてるのか心配になってきたぞ

((== '(0 1) b)
 (fresh (a ad dd)
   (poso dd) (== `(,a ,ad . ,dd) n) (exp2o n '() q)
   (fresh (s)
     (splito n dd r s))))

底が2のとき
あとnが4以上だな
qexp2oで求める
(poso dd) (== ``(,a ,ad . ,dd) n)nが4以上であることを
確認しつつnの3ビットめからをddに取り出す
(splito n dd r s)nを上位2ビットと下位ビットに分ける
下位ビットがrになってるわけか
なるほどねえ

((≦o '(1 1) b) (<lo b n) (base-three-or-moreo n b q r))
底が3以上でb ≦ nならbase-three-or-moreo

おしまい
網羅は・・・してるのか
してるみたいだな
してる気がする