kb84tkhrのブログ

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

Reasoned Schemer (25) わり算 続き

で本文を読みすすめてみる

  • n < m、n = m、n > m の3つの場合に分けている

それならそういうことがわかりやすいように書くべきなんではないだろうか
素のSchemeで言えば

  (cond ((< n m) ...)
        ((= n m) ...)
        ((> n m) ...))

って書いてあれば一目瞭然なんだから

続きを読む

Reasoned Schemer (23) 数の比較

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

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

続きを読む

Reasoned Schemer (21) かけ算続き

  • bound-*oが仕事をしないとたとえば(run 1 (n m) (>1o n) (>1o m) (*o n m '(1 1)))が値を返さない

それはそうですね
それはそういうものかと思ってた
終われるようにするんだ
bound-*oが何をすれば終わる?失敗しても次のn、mで試すだけなのでは?

続きを読む

Reasoned Schemer (21) かけ算

8. Just a Bit More

> (run 10 (x y r) (*o x y r))
((() _0 ())
 ((_0 . _1) () ())
 ((1) (_0 . _1) (_0 . _1))
 :
 :

パターンで(つまりnonground valueで)いっぱい出てくる

(run* (x y) (addero x y '(1 0 1)))ってすると足すと5になる組み合わせがすべて出てくる

のときnonground valueが出てこないのは答えが決まってたから?

*oの定義の方がadderoよりも詳しく説明してある
こっちの方が初心者向きってことかな?

続きを読む

Reasoned Schemer (20) 足し算、引き算、整数

(defrel (+o n m k) (addero 0 n m k))

これは当然

(defrel (-o n m k) (+o m k n))

なるほどね
関係プログラミングっぽい!

(defrel (lengtho l n)
  (conde
    ((nullo l) (== '() n))
    ((fresh (d res)
       (cdro l d)
       (+o '(1) res n))
       (lengtho d res))))

からの

> (run 3 q (lengtho q q))
(() (1) (0 1))
> (run 4 q (lengtho q q))

一瞬対角線論法みたいでおもしろいと思ったけど、そんなに深い意味はないかな?どうかな?

続きを読む