kb84tkhrのブログ

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

Reasoned Schemer (23) 数の比較

=loとほぼ同じ形で<loを定義
=lo<loを使って<=loを定義

run 8 (n m) (<=lo n m))run 9 (n m) (<=lo n m))の値を比較して
前者は後者に含まれてますね、ってやってるけどここでは何がいいたいのか

(defrel (<o n m)
  (conde
    ((<lo n m))
    ((=lo n m)
     (fresh (x) (poso x) (+o n x m)))))

nの長さがmの長さよりも短ければ成功
nの長さとmの長さが同じなら、nに正の数を足してmになれば成功

再帰はなし

(run 6 m (<p '(1 0 1) m))の値は(() (1) (_0 1) (0 0 1))らしい
やっぱりrun 6は6つ答えを見つけるまで探し続けるわけじゃないんだなあ
(_0 1)が2個分と数えてもまだ5つだし
(run 2 (n m) (*o n m '(1)))にはそもそもひとつしか値がないし

でも
(run 6 (x y) (appendo x y '(cake & ice d t)))には値があるけど
(run 7 (x y) (appendo x y '(cake & ice d t)))には値がなくてずっと探し続けてる、
っていうのあったんだけどなあ
なんでここでは5つ見つけて諦めてるんだろうか
何が違うのか