Reasoned Schemer (107) logo 続き6
(fresh (q1 bwq1)
(+o q '(1) q1)
(*o bw q1 bwq1)
(<o nw1 bwq1))
bwq1 = bw * (q + 1)
b
の長さのq + 1
倍っていうのはb
のq + 1
乗の長さってことだな
nw1
をまだ計算してないのにとりあえず比較するというその順番にいまだなじまない
fresh
で囲んでいるのはq1
、bwq1
を局所化しているってことかな
(exp2o n '() nw1)
(+o nw1 '(1) nw)
nw
はn
の長さ
つまりn
の長さはb
のq + 1
乗の長さより小さい
長さで比較してるのは楽をしたいから?
どっかにもあったなそういうの
上限が付けばいいってことだろう
(/o nw bw qlow1 s)
(+o qlow '(1) qlow1)
(<=lo qlow q)
n
の長さをb
の長さで割ってるのはn
がb
の何乗かって話か
q
の長さはそれ以上ですよと
(fresh (bqlow qhigh s qdhigh qd)
(repeated-mulo b qlow bqlow)
(/o nw bw1 qhigh s)
(+o qlow qdhigh qhigh)
(+o qlow qd q)
(<=o qd qdhigh)
b^qlow=bqlow
・・・はここではまだ使われてないな
qlow
と似たような感じでqhigh
を求めて、
えーとq
がqlow
とqhigh
の間にありますよってことか
そういう
q
のうち最大のもの、っていうのもなかなか書きづらい気がする
これやってたってことでいいのかな
(fresh (bqd bq1 bq)
(repeated-mulo b qd bqd)
(*o bqlow bqd bq)
(*o b bq bq1)
(+o bq r n)
(<o n bq1)))))
(repeated-mulo b qd bqd) (*o bqlow bqd bq) (+o bq r n)
は答えを出すのに必要なやつで
(*o b bq bq1) (<o n bq1)
は範囲を特定する
・・・
まだすっかりわかった気にはなれないけどちょっと先に進みたい気分
結局関係プログラミング脳にはなれそうにない
だいたいどんなことをやってるのかはわかった
unnestingされてるから行数増えてるけど/o
ほど難しいことしてるわけじゃなかった