kb84tkhrのブログ

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

Reasoned Schemer (70) fuseとか

> (run* q (fresh (x) (== x q)))
'(_0)

xqfuseしている
というのは`(,x . ,q)というassociationがあるということ
でもxqもfreshなので_0

すこし分解して試す

> ((fresh (x) (== x q)) empty-s)
'(((#(x) . #(q))))
> (unify x q empty-s)
'((#(x) . #(q)))
> ((reify q) '((#(x) . #(q))))
'_0

xが変数じゃなくて'#(x)だと思って見るとunifyも結構単純だなという気がする(気のせい

> (run* q (== '(((pea)) pod) '(((pea)) pod)))
'(_0)
> ((== '(((pea)) pod) '(((pea)) pod)) empty-s)
'(())
> (unify '(((pea)) pod) '(((pea)) pod) empty-s)
'()
> ((reify q) '())
'_0

見えてきた

> (run* q (== '(((pea)) pod) `(((pea)) ,q)))
'(pod)
> ((== '(((pea)) pod) `(((pea)) ,q)) empty-s)
'(((#(q) . pod)))
> (unify '(((pea)) pod) `(((pea)) ,q) empty-s)
'((#(q) . pod))
> ((reify q) '((#(q) . pod)))
'pod

打ち込み

> (run* q (== `(((,q)) pod) `(((pea)) pod)))
'(pea)
> (run* q (fresh (x) (== `(((,q)) pod) `(((,x)) pod))))
'(_0)