Reasoned Schemer (102) logo 続き
ではコードを1行ずつ
((== '(1) n) (== '() q))
はわかる
((>1o n) (== '(1) q) (fresh (s) (splito n b s '(1))))
のnは
b
の長さ+1をp
としてp個の0
または1
に1
をくっつけたもの
式で書けば2^(p + q) <= n < 2^(p + q + 1)
Reasoned Schemer (101) logo
1周目ではほとんどあきらめていたlogo
とりあえずlogo
以下コードを入力して動かしながらやっていこう
入力するだけでもなかなか大変 目がちかちかする
↓くらいで書けたら関係プログラミングすげー、っていうところなんだけどなあ
Reasoned Schemer (100) わり算 続き3
/o
自体は問題ない
(defrel (/o n m q r)
(conde
((== '() q) (== r n) (<o n m))
((== '(1) q) (=lo m n) (+o r m n) (<o r m))
((poso q) (<lo m n) (<o r m) (n-wider-than-mo n m q r))))
続きを読む
筆新調しました・象牀絃歌酒讌・蝉丸
同じ教室の人が筆を先生に見せて、この筆どうですかね、って聞いたんですよ
墨が固まってるわね、お湯につけておいて洗いなおせばよくなるかもしれませんよ、
ってああ自分と同じだ、と思ったらそれに続いて
いつから使ってるの?あら4年?それはそろそろ替えないといけないかもしれませんね、と
Reasoned Schemer (100) わり算 続き2
(split n r l h)
はn
からr
の長さ+1だけ取ってl
とし残りをh
とする
ただしl
やh
がちゃんとした数字になるようにする
n: (0 0 1 0 1 1)
r: (1 0 1)
↓
l: (0 0 1 )
h (1 1)
続きを読む
Reasoned Schemer (99) わり算 続き
さてそうやってガードを入れた/o
もこういう式では値を返さない
確かにこれを途中で止めるのは難しそう
> (run 3 (y z) (/o `(1 0 . ,y) '(0 1) z '()))
user break
しっくりこないところもあるけどだいたいストーリーは見えてきた
続きを読む