2019-01-01から1年間の記事一覧
reifyするっぽい何か
いつぞや某プログラミング情報サイトで物議をかもしてた人の物議をかもしてた本 関数型プログラミングに目覚めた!IQ145の女子高校生の先輩から受けた特訓5日間 作者: 岡部健 出版社/メーカー: 秀和システム 発売日: 2015/04/22 メディア: 単行本 この商品を…
(walk w ``((,x . b) (,z . ,y) (,w . (,x e ,z))))は``(,x e ,z)だけど (walk* w ``((,x . b) (,z . ,y) (,w . (,x e ,z))))は``(b e ,y)になる そんなwalk*について考える 変数が見つかったら終わりというだけではなくて 値の中に変数があればそれも置き換…
ここ2週間くらいこれ読んでました 【合本版 第一部】本好きの下剋上(全3巻) 本好きの下剋上(合本版) (TOブックスラノベ) 作者: 香月美夜 出版社/メーカー: TOブックス 発売日: 2017/03/17 メディア: Kindle版 この商品を含むブログ (6件) を見る
新たな変数を導入する (define (call/fresh name f) (f (var name))) fは変数を引数にとってgoalを返す関数 たとえば(lambda (fruit) (== 'plum fruit))
AtCoder Beginner Contest 145 - AtCoder は「D - Knight」が突破できず 最初は何も考えずメモ化再帰で解こうとしたけどメモ化はちっとも効果なし 図を描いてみたら単なるパスカルの三角形 じゃあnCk求めればいいんだもらったな こう書いたら半分TLEになりま…
今日は行書だけ 行書のときの方が楷書に比べてあれこれ考えずにすむ分書きやすい・・・と書いてるときは思ってるんだけどサムネイル画像を見るとバランスのとれてなさに愕然とする
何か見えた気もするんだよな 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は出てこないので 全部いっぺんに見ないといけない いっぱい式があるけどどれが大事な式なのか