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つ見つけて諦めてるんだろうか
何が違うのか