EoPL
Exercise 2.26 うーん。難解。Figure 2.5 を参考に手続きを書けば良いのは分かってるんですが。
小出しになってしまってますがご容赦下さい。続きです。 t が var-term 以外のケイスを以下に。 u が var-term の場合、引数を入れ替えて unify-term 呼び出し u が constant-term の場合 t が constant-term で値が同一なら (empty-subst) を戻す u が app-…
昨晩の懇親会開始待ちで検討したナニです。。直前エントリの続きです。スデに呑み屋の中。一人でビール呑みながらノート開いてるさまは微妙にちがいない。
待ち時間で整理してみる事に。 まず unify-term の仕様 (というか実装) から。 t が var-term の場合 u が var-term 又は u に含まれる id に tid が無い場合は unit-subst 手続きに tid と u を渡した結果を戻す 上記の条件に合致しない場合、#f を戻す t …
直前エントリで unify-terms が #f を戻すケイスを列挙してますが、引数リストの cdr がこうなってれば良いのか。ちなみに car は #f を戻さない、というのが基本。
なんとなく目が覚めたので続行。
Exercise 2.25 unify-terms を検討。 ts と us が両方同時に '() なら (empty-subst) を戻す ts あるいは us のどちらかが '() なら #f を戻す 以下。 (test* "(unify-terms '() '())" '(empty-subst-rec) (unify-terms '() '())) (test* "(unify-terms '() …
Exercise 2.25 all-ids ってどっかで見たんだけどな、と思いつつ grep しても出てこなかった。テキストを遡ってみたら 2.10 にあるな。2.2 節はディレクトリ別にしてたので出てこなかったのか。以下なカンジ。 (add-load-path ".") (load "define-datatype")…
Exercise 2.25 よく分からんのう、と言いつつ手続き定義をニラむ。以下、unify-term の一部。 (define unify-term (lambda (t u) (cases term t (var-term (tid) (if (or (var-term? u) (not (memv tid (all-ids u)))) (unit-subst tid u) #f)) (else
昨晩の続き。subst-in-terms です。 ぢつは仕事中、ってか休憩中に map 使えるぢゃん、ってコトに気づく。
とりあえず、鍛錬をこつこつ続ける事に。高等数学きちんとヤッてないので scheme 使って計算云々な役立て方をイメージするのが微妙なんでしょうか。
理解が微妙なまま進める、というのも手を動かし辛い。とりあえず昨晩のソレをビンゴと見てつき進むしかないな。
Exercise 2.24 のつづき 直前エントリにて substitution なオブジェクトには置き換え対象の term と置換後の symbol が入ってて、渡された symbol と term の symbol が eqv? だったら置き換える、という理解。 と思ったんですが、逆かな、って思いはじめて…
Exercise 2.24 のつづき 今日の晩メシ担当らしい。作成開始するまでの間で全体見つつ substitution を整理してみる。とりあえず最終的に作成する subst-in-term 手続きはイメージ的には以下なカンジになるのだろうか。 (define subst-in-term (lambda (s t) …
Exercise 2.24 現実トウヒで以下なプロトタイプを作ってみた。
英語が読めん。てーか負け惜しみではないんですが substitutions なオブジェクトがどう動くのか、なイメージがナニ。 と言いつつ問題文の全体を眺めてみるに、難しく考えすぎてるのかな。
Exercise 2.24 これ、英語を解読する時点で難解。ってか substitution なオブジェクトが何なのかがイメージできてない。BNF から考える必要あり、なのだろうか。
Exercise 2.23 single pair of ribs で実装ときた。これって gosh> (empty-env) () gosh>で、 gosh> (extend-env '(y) '(8) (empty-env)) ((y) . (8)) gosh>で、 gosh> (extend-env '(d x) '(6 7) (exptend-env '(y) '(8) (empty-env))) ((d x y) . (6 7 8))…
Exercise 2.21 検討前に思わず手が動いた。 $ gosh gosh> (cons '(() ()) '()) ((() ())) gosh> これはこれは。しかも問題解いてない (とほほ
Exercise 2.20 用件済んだので次の問題に着手。2.17 ではメッセージパッシングで云々してます。これがいっちゃん楽、っていう固定概念をステないと駄目な気がしますが、とりあえず実装してみます。
the world of Android の開始前に紙の上で検討。
2.3.3 節に突入。ソース修正。
とりあえず Exercise 2.17 は昨晩のナニで OK ってコトにします。
empty-env が戻す手続きオブジェクトは error 手続きを呼び出して例外を発生させる。 (define empty-env (lambda () (lambda (sym) (eopl:error 'apply-env "No binding for ~s" sym))))Gauche では guard という手続きがあるので has-association? はこうす…
再び合間を縫って検討。
OSC の合間をぬって練習問題をナニ。電気が無いので紙の上で検討してたりして。
Exercise 2.15 stack は手続きオブジェクトなんだけど操作の数が多いし云々、と頭を痛めつつ移動中の車の中で実装に思い至る。調子が良いトキって端末の前じゃない方が良いひらめきがあるのかどうなのか。 # そもそも調子が良いのかどうかも不明ですが (何
ええと、Figure 2.3 の試験を書いてから Exercise 2.15 に着手する方向で。
Exercise 2.14 書き方が難しい。ってかそれ以前の問題もあったりなんかします。
昨晩夜更かしし杉で午前中 gdgd だった。現在夕刻なんですが続きをナニ。