何か見えた気もするんだよな substitusionのstreamってなんなのかってのがイメージできてない (unify u v s)はuとvは同じですっていうことにしたsを返すこと、 っていうあたりまではわかった気になっている この間のギャップが埋められるだろうか
(define (conj2 g1 g2) (lambda (s) (append-map-inf g2 (g1 s)))) disj2と似てるような似てないような disj2はappend-infを呼んでるけどconj2はappend-map-infを呼ぶ disj2はg1もg2もsに適用されるけどconj2はg2だけ g1とg2が非対称なんだ
(define (take-inf n s-inf) (cond ((and n (zero? n)) '()) ((null? s-inf) '()) ((pair? s-inf) (cons (car s-inf) (take-inf (and n (sub1 n)) (cdr s-inf)))) (else (take-inf n (s-inf)))))
(define (alwayso) (lambda (s) (lambda () ((disj2 succeed (alwayso)) s)))) しっかり読んだらalwaysoの動きがイメージできるようになるだろうか まずalwaysoの形を確認 alwaysoは引数のない関数で substitutionを引数にとって、substitusionのstreamを返…
次はこれ > (let ((s-inf ((disj2 (== 'olive x) (nevero)) empty-s))) s-inf) (((#(x) . olive)) . #<procedure:...r/minikanren.scm:52:29>) (== 'olive x)の値と(nevero)の値がappendされているようではある ところでこの式って((disj2 (== 'olive x) (nevero)) empty-s)と何が違うの letの意味</procedure:...r/minikanren.scm:52:29>…
あれこれやらず今日は楷書だけ 左払いがコントロールできなくてボテッとしたりひょろっとしたりする筆の向きが影響してるような気がするけどどうするのがいいのかはよくわからないいろいろ考えすぎておかしなことになっている気もする 特に房がうまくバラン…
・・・Ubuntu入れてみようか(ごくり Ubuntu (18.04) をMacbook Airに入れてみる - kb84tkhrのブログ というわけで先日いろいろ苦労しながらMacbook AirにUbuntuを入れましたが最近Windows PCの利用割合が増えてきたのと ムスメが学校でパソコン使って調べも…
(define (nevero) (lambda (s) (lambda () ((nevero) s)))) これはminikanren言語じゃないよね 動かしても関数が返ってくるだけなのでわかりづらい
(define (disj2 g1 g2) (lambda (s) (append-inf (g1 s) (g2 s)))) goalはsubstitutionを取ってsubstitusionのstreamを返すもの というのはあってる(当然 でこれってどういう意味なの っていうかその前にsubstitusionのstreamってなんなのかってのがわかっ…
condeのモトになっているdisj2とそのヘルパー関数append-inf append-infから見よう
streamとは空リストかcdrがstreamであるペアかまたはsuspension suspensionとは(lambda () body)という形をしていて評価するとstreamを返すもの 遅延ストリームって言われるやつだな そんなのが突然の出現 そして意外にさらっと説明・例示が終わる
unify Prologといえばユニフィケーションって出てくるくらいだからきっと何か大事なもの
侍巾帷房紈扇 楷書はうっかり筆を拭いてしまって消滅今回はなんとなく形がとりやすい印象
(ext-s x v s)はsubstitution sにassociation `(,x . ,v) を 追加したものを返す ただし循環参照ができるようなassociationは追加できず#fを返す
ムスメ用に借りてきた本 戦国人物伝 今川義元 (コミック版日本の歴史) 作者: すぎたとおる,玉置一平,加来耕三 出版社/メーカー: ポプラ社 発売日: 2017/04/28 メディア: 単行本 この商品を含むブログを見る
10章は処理系を書く話っぽいので ここからひさしぶりに写経モードで そういえば、ここで書く処理系はminiKanrenと呼ばれるものらしい ファイル名つけようと思った時にふと名前が気になった 変数を定義
(defrel (enumerate+o r n) (fresh (i j k) (bumpo n i) (bumpo n j) (+o i j k) (gen&test+o i j k) (== `(,i ,j ,k) r))) bumpo、gen&test+oはenumerate+oのヘルパー関数だったみたい (run* s (enumerate+o s '(1 1)))とやると0から3までの数をふたつと そ…
(defrel (onceo g) (condu (g #s) (#s #u))) これはただgを実行だけだけど成功するのは1回だけね、ってことだな (#s #u)は書かないといけないんだろうか
(run* q (conda ((alwayso) #s) (#s #u)))はno value condaはquestionが成功なら次の行以降は実行しないんだけど これだと(alwayso)が成功し続けてその行の実行が終わらないので そこでconduの登場 こっちはcondaよりもさらに早く打ち切る questionが1回成功…
異糧妾御績紡 あんまり完成度は上がらなかったあっちもこっちもバランスがおかしい何をどうしていいかよくわからなくなってる感がある
9. Thin Ice もう章題を解釈するのはあきらめている この終盤で新しい構文登場
戻って本体 (logo n b q r) これはcondeなので1行ずつ見ていく 再帰はしてないな
(base-three-or-moreo n b q r) 名前からしてb(baseだろう)が3以上の時のn = b^q + rの関係に違いない baseが2のときはexp2o base-three-or-moreoにはcondeは出てこないので 全部いっぺんに見ないといけない いっぱい式があるけどどれが大事な式なのか
ここからが未体験ゾーン (logo n b q r)でn = b^q + rの関係 見るからに複雑そう 単にq(やr)を求めるだけでなくnやbを求めるのにも使えたり 無限に値を探し続けたりしないようにしたりするだけでここまで書かなきゃ いけないものなのか
歴史的なイベントには何の関係もなくお出かけしてきましたムスメにどっか行こうとせがまれて探したのがここウチからは少し離れてますが
÷o (
あるということに気づいてなくてお酒いただいてしましましたが まあCまで解ければレートも下がらないだろうということで参加してみたら意外にすんなりDまで解けて茶コーダーにパフォーマンスも初の1200超え
今日は書道教室の展覧会でした 進歩しているのかはよくわからない確実なのは文字数が増えていることくらい 文字数が増えてくると、満足できるかというより失敗が少ないことを基準にしたくなってきますこっちの方がマシかな、みたいな最後は先生に選んでもら…
この章の途中で中断が入ったわけだが かなり手ごわかった記憶 こんどは理解度が上がってるだろうか
Under the Hoodはちょっとだけ見た ちょっとだけではなんのことやら 7. A Bit Too Much ビット操作から始めて足し算引き算を作るまで