kb84tkhrのブログ

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

Reasoned Schemer (104) logo 続き3

bの意味がどうもつかめてないんだよな

わかった
bはやっぱりbaseなんだ
exp2oは2の累乗(とその仲間たち)を求めるんだけどそれはb()のときで
b(1)なら4の累乗、b(1 1)なら8の累乗、b(1 1 1)なら16の累乗って
考えたらいいんだ
つまり(2の(bの長さ+1)乗)の累乗ってわけだな

(exp2o n b q)(exp2o n b2 q1)再帰するのは
pbの長さとして
nつまり(2^(p + 1))^qを計算する代わりに
(2^((2p + 1) + 1))^(q/2)つまり(2^(2*(p + 1)))^(q/2)を計算してもいいよってことだ
p + 1pq2qと置きなおすとn = (2^p)^2q = (2^(2p))^qってこと

やっとすっきりした

というわけでexp2o最後の行

    ((fresh (q1 nhigh b2 s)
       (== `(1 . ,q1) q) (poso q1)
       (poso nhigh)
       (splito n b s nhigh)
       (appendo b `(1 . ,b) b2)
       (exp2o nhigh b2 q1)))))

いちばん複雑だけど、感じもつかめたしいけるんじゃないの

qは奇数
いちばん大きな違いは(splito n b s nhigh)
これはどういう意味になんのかな
(appendo b ``(1 . ,b) b2) (exp2o nhigh b2 q1)とセットで考える

えーとnhighn2^(p + 1)で割った答えってことだな
n=nhigh*2^(p + 1)って書いた方が使いやすいかな?

(appendo b ``(1 . ,b) b2) (exp2o nhigh b2 q1)
nhigh=(2^(2*(p + 1)))^(q/2 - 1)ってことだから

n = nhigh*2^(p + 1)
  = (2^(2*(p + 1)))^(q/2 - 1)*2^(p + 1)

p + 1pq2q+1と置きなおすと
n = (2^p)^(2q + 1) = (2^(2p))^q*2^pって計算できるよ、と

こんな感じじゃないでしょうか