kb84tkhrのブログ

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

Reasoned Schemer (30) 引き算

次は引き算ですがこれはそのままとはいきません

関係プログラミングだから足し算ができれば自動的に引き算もできてましたが(効率とかどうなのかな)
普通は引き算は引き算で書かないと

引き算を書くには、足し算と同じようなことを書く方法もありますが、
足し算は半加算器・全加算器使ってやってる、引き算は?と考えると
2の補数ってやつを使いますね

続きを読む

Reasoned Schemer (28) わり算 終わり

で、ふたつに分けたらわり算がどうなるというのか

わり算短くなったなーと思ったら

(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))))

まだ割ってなかった!

続きを読む

Reasoned Schemer (28) わり算 続き

次はlの右側の0がなくなる例でやってみよう

もう少し圧縮した書き方で

s -> (splito '(0 0 1 0 1) '(1) l h)
  4 -> (splito '(0 1 0 1) '() '() h), l=()
    2 -> h=(1 0 1), l=()
  6 -> (splito '(0 1 0 1) '() ^l h), l=(0 . ^l), (pos ^l)
    2 -> h=(1 0 1), ^l=()

あれ、同じ答え出た、と思ったらひとつ戻って(pos ^l)に不適合なんだな
ややこしい
でも確かに右側の0が消えた
でもでもまだピンと来ていない

続きを読む

Reasoned Schemer (28) わり算 続き

splitoは数をふたつの部分に分けてくれるわけですが

splitoは他にどんなことをしますか?
splitoは関係ですから、下位ビットのlと上位ビットのhを結合してnを作ることができます。rの長さを使ってパディングビットを詰めます。

こういうの聞くと関係に名前をつけるのが悩ましくなるな
結合でもあり分割でもある
関係なんだから動詞にしちゃいけないのかな

続きを読む

図書の貸出履歴の話

どこぞの小学校で子供たちが借りた本のデータを記録・管理してたっていうのが
話題になってますね
第一印象、ああがんばってるな、と思ったんですけどネットでは図書館が
やってはならないことって話が盛り上がってます
中には「絶対悪」とまで言う人も

でもそれって、そこまで悪いことなのかなあ?

続きを読む

Reasoned Schemer (27) わり算 続き

でどうやるかなんですけど

どうやったらもっといい/oを定義して、66コマめのrun*が値を持つようにすることができるでしょうか?
数がビットのリストで表されているので、リストを「head」と「rest」のふたつの部分に分けて問題を分割してみてはどうでしょう?

なにを言っているんだかわかりません

2進数で表現された数を2で割ってるんだから一桁ずつなにかするっていうのはわからなくもない
でもそれって2で割ったときのため用?他の数で割ったときにも適用できるのかな?
練習だから?

続きを読む