2018-06-01から1ヶ月間の記事一覧
わり算 いきなり(run 4 (n m q r) (/o n m q r))の値はこれこれです、と見せておいて 定義は次のページなのはニクい演出?たまたま? ついクセで引き算を再帰的に繰り返すようなのを想像してページをめくりました
=loとほぼ同じ形で
bound-*oが仕事をしないとたとえば(run 1 (n m) (>1o n) (>1o m) (*o n m '(1 1)))が値を返さない それはそうですね それはそういうものかと思ってた 終われるようにするんだ bound-*oが何をすれば終わる?失敗しても次のn、mで試すだけなのでは?
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になる組み合わせがすべて出…
(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)))) からの …
さてgen-addero ある意味こっちが本体? genは何のgenかな 特殊ケースを除いた残りだから、genericのgenだろうか (defrel (gen-addero b n m r) (fresh (a c d e x y z) (== `(,a . ,x) n) nの最下位ビットがa、上位ビットがx nは1以上でないと困るね
表にしてみた 行 b n m r overlap 計算 1 =0 =0 6(n=1 m=0) 8(n=2 m=0) (== n r) 2 =0 =0 >0 -- (== m r) 3 =1 =0 6(n=1 m=0) 8(n=2 m=0) (addero 0 n '(1) r) 4 =1 =0 >0 -- (addero 0 '(1) m r) 5 =1 =1 6(n=1 m=1) (full-addero b 1 1 a c) 6 =1 1 3 5 (g…
はじめて読む人は114コマ目まで飛ばしていいよ でも読む やっぱり2回は読めってことだなPreface には書いてなかったけど 処理系まで理解してからもう一度読めばそりゃ間違いなく理解度は上がるもんな nとmを足した答えがr 下からの繰り上がりはb (defrel (ad…
90 adderoの定義は104コマめにあります。 なぜ前方参照? しかもadderoややこしそう・・・ (run 3 (x y r) (addero 0 x y r))の値はなんですか。 ((_0 () _0) (() (_0 . _1) (_0 . _1)) ((1) (1) (0 1))) 値がそうなることは(順番を除けば)理解できる ((1)…
自然数の表現 ビット(0、1)のリスト リストの先頭が20の位、末尾が最上位 表現は一意 最上位は0にならない 自然数0の表現は() 自然数をビットによる表現に変換する
7. A Bit Too Much bitです (defrel (bit-xoro x y r) (conde ((== 0 x) (== 0 y) (== 0 r)) ((== 0 x) (== 1 y) (== 1 r)) ((== 1 x) (== 0 y) (== 1 r)) ((== 1 x) (== 1 y) (== 0 r)))) これは単純 (defrel (bit-xoro x y r) (fresh (s t u) (bit-nando x…
こんどはいっそうシンプルに (defrel (nevero) (nevero)) #uは失敗するが、(nevero)は成功も失敗もしない (run 1 q (nevero)) → 値なし (run 1 q #u (nevero)) → () 1回目に#uで失敗するから (run 1 q (conde (#s) ((nevero)))) → (_0) 1回目に#sで成功する…
6. The Fun Never Ends... 何がNever Endsなのかというと (defrel (alwayso) (conde (#s) ((alwayso)))) これが終わらないってことか? Schemeに戻せば (define (always) (cond (#t) (else (always))))で ただ#tを返すだけのコードだけれどもalwaysoはどう動…
今のところメインの目的は資格取得なので使ってみました、じゃなくてほんとにお勉強 今はスマホやタブレットでも勉強できて便利ですね回線はケチり気味なプランなので動画とかだとパケットを使うのが気になりますがまあなんとか足りるかな速度制限がかかると…
(a b e d _0)はy=eってことなんだろうけどやっぱり なんで右側のeが消えているのか 左のeが消える場合も右のeが消える場合もあって、ここでは右のeが消えてる、ってこと? ひとつずつ再帰を追っていけばわかるのかなあ (a b _0 d _1 e)に至ってはなぜ_0が消…
5. Members Only またわからんタイトルを (define (mem x l) (cond ((null? l) #f) ((equal? (car l) x) l) (#t (mem x (cdr l))))) memだからか安直な いやダブルミーニングが隠されてるかもしれないぞ気をつけろ
いろんなパターンを試します (run 5 x (fresh (y) `(appendo `(cake & ice . ,y) '(d t) x))) の値は (() (_0) (_0 _1) (_0 _1 _2) (_0 _1 _2 _3)) run*だと帰ってこないパターンですね なのに (run* x (fresh (z) `(appendo '(cake & ice cream) `(d t . ,z…
4. Double Your Fun 何が2倍? (define (append l t) (cond ((null? l) t) (#t (cons (car l) (append (cdr l) t))))) lがプロパーなリストだと値を持たないけれども tはプロパーなリストでも値を持つ ということを気にしている?
member?を翻訳して簡略化して試します 再帰をひとつずつたどっていったり 値を持たなかったり member?はプロパーなリストでないとエラーになりますが memberoは最後の要素が無視されるだけ Schemeの関数から翻訳していますがSchemeの関数と同じ結果を出すわ…
3. Seeing Old Friends in New Ways 再帰出てきました (define (list? l) (cond ((null? l) #t) ((pair? l) (list? (cdr l))) ((#t #f)))) 翻訳だけすると (defrel (listo l) (conde ((nullo l) #s) ((pairo l) (fresh (d) (cdro l d) (listo d))) (#s #u)))…
nulloは見たまんま (defrel (nullo x) (== '() x)) なんだけどじーっと見てるとわからなくなってきたり これは#sとか#uとか返すやつ pairoもやることは見たまんまなんだけど定義にはconsoを使う (defrel (pairo p) (fresh (a d) (conso a d p))) Is pairo re…
ウチのムスメは本が好きなので占いとか心理テストとかヘアアレンジとかちょっと怖い系の話とか好きな本は自分で勝手に読んでてそれはいいんですが興味のない分野には見向きもしないタイプ それはそれで悪いわけじゃないんですけど親的にはいろんな本を読んで…
2. Teaching Old Toys New Tricks Don't put new wine into old bottlesのもじりだったりするんだろうか あんまり関係ないかな そういうとこ気にしなきゃいけないとこが多そうで翻訳はちょっとたいへんそうだな SICPとかマジメなやつのほうがある意味楽そう …
disj2の中にconj2が現れるパターンはよく出てくるので、conde式を導入する (run* (x y) (disj2 (conj2 (teacupo x) (teacupo x)) (conj2 (== #f x) (teacupo y)))) は (run* (x y) (conde ((teacupo x) (teacupo x)) ((== #f x) (teacupo y)))) と書ける
conj2はふたつのゴールが両方とも成功すれば成功する 2は引数がふたつってこと conjはたぶんconjunctionの略 連言てやつ andみたいなもの 定理証明手習いにも出てきた
1. Playthings 相変わらず章タイトルは役に立ちそうにありません goal: 何かしら成功したり失敗したり値を持たなかったりするもの #s: 成功 #u: 失敗 run*: 成功する変数の組み合わせを探してリストで返してくれるなにか たとえば(run* q (== q 'pea))の値は…
『The Reasoned Schemer』買いました The Reasoned Schemer (MIT Press) 作者: Daniel P. Friedman,William E. Byrd,Oleg Kiselyov,Jason Hemann,Duane Bibby,Guy Lewis Steele Jr.,Gerald Jay Sussman,Robert A. Kowalski 出版社/メーカー: The MIT Press …
boot.jsに戻って nodeだったらfs、path、vmのモジュールを読み込む fs = require("fs");みたいな書き方はちょっとおもしろい なんでもオブジェクトだとかなんでも連想配列みたいな感じは好き
$tw.modules = { titles: {}, // hashmap by module name of moduleInfo types: {} // hashmap by module type and then name of moduleInfo }; このへんからモジュールシステムの話
boot.jsの続きから /*jslint node: true, browser: true */ /*global modules: false, $tw: false */ なにかを説明するためのコメントではなさそうな雰囲気 jslintはJavaScript lintってことだろう 検索 JSLint: The JavaScript Code Quality Tool これか ふ…