EoPL

Exercise 2.11 (3)

ええと、gosh な REPL で問題の手続きを評価してみると同じ形で例外エラー。中身を見てみると以下な記述を発見。 (primapp-exp (prim rand1 rand2) (primapp-exp (subst rand1) (subst rand2)))))))これなのかな、ということで修正して再確認してみると Error…

Exercise 2.11 (2)

またまたちょっとだけ。昨日の朝の続き。 問題点としては以下な模様。 渡す lambda な S 式は expression な形になっている必要あり parse すれば良いのか primapp-exp を expression.scm に追加 fresh_id.scm も修正必要 lexical-address と expression が…

Exercise 2.11 (2)

またまたちょっとだけ。 設問の記述に沿って試験を書いてみます。

Exercise 2.11

ちょっとだけ。lambda-calculus-subst 手続きですが例えば var-exp の部分が以下になってて (var-exp (id) (if (eqv? id subst-id) subst-exp exp)subst-exp に単純に置きかえるのではなくて (if (occurs-free? id exp) subst-exp (fresh-id exp id))みたい…

Exercise 2.10

fresh-id という手続きについて云々。定義が以下らしい。 (define fresh-id (lambda (exp s) (let ((syms (all-ids exp))) (letrec ((loop (lambda (n) (let ((sym (string->symbol (string-append s (number->string n))))) (if (memv sym syms) (loop (+ n…

Exercise 2.9

(a b c) を parse すると以下。 gosh> (parse-expression '(a b c)) (app-exp (free-info a) (free-info b))あるいは (lambda) を parse すると以下。 gosh> (parse-expression '(lambda)) *** ERROR: pair required, but got ()どうすりゃ良いのかな。51p …

Exercise 2.8

いちおう試験にはパス。問題に compare this version to the original solution とあるので確認してみることに。

EoPL 読んでた記録の確認とその記録 (8)

Ex.2.8 です。ちょっとカン違いしてたのですが、以下は #t なんですね。 > (occurs-bound? 'x '(lambda (y) y))occurs-bound? は以下なカンジ。 (define occurs-bound? (lambda (var exp) (cases lexical-address exp (lit-exp (datum) #f) (lex-info (id de…

EoPL 読んでた記録の確認とその記録 (7)

Ex.1.19 の free-vars および bound-vars はヤッツケ。とりあえずできあがりは GitHub に反映しといて Ex.2.8 に着手。 とりあえず occurs-free および occurs-bound と expression を定義なのか。expression は既存を流用。て、Ex.2.7 の定義を使うことに今…

EoPL 読んでた記録の確認とその記録 (6)

今週は再び台風も接近しつつある中、色々と大変らしいのですが、昨晩同様気分転換に EoPL なナニでもごもごしようと思ってます。 とりあえず Ex.1.19 から着手。free-vars とか bound-vars を書け、とのこと。occurs-free? とか occurs-bound? の試験も書い…

EoPL 読んでた記録の確認とその記録 (5)

たまにはこちらに現実トウヒ、ってここも不具合が直らない、で終わってるorz とりあえず (test* "if expression more" '(if-exp (app-exp (free-info null?) (free-info l)) (free-info l) (lit-exp 1)) (parse-expression '(if (null? l) l 1)))な試験は ap…

EoPL 読んでた記録の確認とその記録 (4)

標題をいい加減何とかしないと、と思いつつ。 とりあえず、 abstract syntax の定義 parse-expression の定義 unparse-expression の定義 を作ってみます。

EoPL 読んでた記録の確認とその記録 (3)

留守番しつつ Exercise 1.31 リトライ。とりあえず以下をでっちあげてみた。 (define lexical-address (lambda (l) (let inner ((l l) (dict '())) (cond ((null? l) '()) ((symbol? l) l) ((eqv? (car l) 'lambda) (list (car l) (cadr l) (inner (caddr l)…

EoPL 読んでた記録の確認とその記録 (2)

若干標題が微妙な気がしますが当分これで続けてみます。 昨晩ですが、以前作成した lexical-address とその試験を手元に持ってきて動かしてみて、一応試験に成功するところまで確認しています。 つうかこれ abstract syntax 使え、ってありますね。で、これ…

EoPL 読んでた記録の確認とその記録

コードを引用してるんだけど、これって GitHub あたりにあったりするのかなぁ。 確認してみたところ 無い。自分エントリをさらってみたところ、2009 年あたりにもごもごしている模様。2.2 節以降を再確認しつつ EoPL も再確認しつつ進めてみることに。

EoPL reading (144) 3.2 The Front End

試験を書きかけて判明。emptylist を定義してない。 (use gauche.test) (add-load-path ".") (load "parse-program") (load "Fig3.2") (load "run") (test-start "Ex.3.7") (test-section "example") (test* "(run '(list 1 2 3))" '(1 2 3) (run '(list 1 2…

EoPL reading (143) 3.2 The Front End

色々バタバタしてたので久々なカンジ。 Exercise 3.7 cons とか car とか cdr とか list の追加。

EoPL reading (142) 3.2 The Front End

アタマが違う方面に行ってるのですが、明日向けのリハビリ、という事で無理矢理手を動かしてみます。 Exercise 3.6 ええと、scan&parse ではなく parse-program 使います。例示されているナニ的には以下なカンジでしょうか。 gosh> (run '(minus (+ (minus 5…

EoPL reading (141) 3.2 The Front End

EoPL の練習問題をがっつりヤるか、GAE 方面にニゲるか、入門 Git に走るか悩ましいと言いつつ gdgd 続行。# 今 1300 Excersize 3.5 当分 primitive の追加な問題が続く。おそらくは parse-expression 手続き apply-primitive 手続き に分岐を追加をしてあげ…

EoPL reading (140) 3.2 The Front End

早朝練習。 Exercise 3.4 REPL を使うのは手動で以下。

EoPL reading (139) 3.2 The Front End

ええと、parse な試験は全部書けてはないはずなので検討。

EoPL reading (138) 3.2 The Front End

直前エントリはダウトで終わったんですが、帰宅後に以下をでっち上げた。 (define parse-program (lambda (datum) (list 'a-program (parse-expression datum)))) (define parse-expression (lambda (datum) (cond ((number? datum) (list 'lit-exp datum)) …

EoPL reading (137) 3.2 The Front End

とりあえず練習問題に手を付けてみます。 Exercise 3.3 eva-program 手続きがマトモに動けば良いはず。sllgen が不要なのでこちらを先に、な easy さをご容赦頂ければ幸いです。

EoPL reading (136) 3.2 The Front End

昨晩の不具合は eopl:error-stop の定義が微妙な事が原因。呼び出されてるのは sllgen:error 内。 (define sllgen:error (lambda (who format . data) ;; print the message (eopl:printf "Error reported by sllgen during ~s:~%" who) (apply eopl:printf …

EoPL reading (135) 3.2 The Front End

とりあえず、scanner-spec-3-1 と grammar-3-1 を作ってみる。

EoPL reading (134) 3.2 The Front End

SLLGEN というのは define-datatype と同様で EoPL 独自のソレらしい。以下で取得。 $ wget http://www.cs.indiana.edu/eopl/code/interps/sllgen.scm --2009-10-22 22:58:03-- http://www.cs.indiana.edu/eopl/code/interps/sllgen.scmうーん。とりあえず頑…

EoPL reading (133) 3.1 A Simple Interpreter

Exercise 3.2 ええと問題の意図を微妙にはかりきれてなかったんですが、おそらくは SICP に出てくる normal-order evaluation と applicative-order evaluation の話と見ました。 あれは結果に影響があるケイスもあるはず。 この問題もこの程度で次行きます…

EoPL reading (132) 3.1 A Simple Interpreter

Figure 3.2 を実装してみる。Ex 3.1 は OK ってコトにしといて次に進む。

EoPL reading (131) 3.1 A Simple Interpreter

嫌も応も無く英語が読めんと微妙な世界に突入している模様。 Exercise 3.1 ええと、以下な実装にて

EoPL reading (130) 2.4 A Queue Abstraction

よく考えたら 2.4 でした。で試験も書いたので以下にて。

EoPL reading (129) 2.3 Representation Strategies for Data Types

Exercise 2.26 うーん。難解。Figure 2.5 を参考に手続きを書けば良いのは分かってるんですが。

EoPL reading (128) 2.3 Representation Strategies for Data Types

小出しになってしまってますがご容赦下さい。続きです。 t が var-term 以外のケイスを以下に。 u が var-term の場合、引数を入れ替えて unify-term 呼び出し u が constant-term の場合 t が constant-term で値が同一なら (empty-subst) を戻す u が app-…

EoPL reading (127) 2.3 Representation Strategies for Data Types

昨晩の懇親会開始待ちで検討したナニです。。直前エントリの続きです。スデに呑み屋の中。一人でビール呑みながらノート開いてるさまは微妙にちがいない。

EoPL reading (126) 2.3 Representation Strategies for Data Types

待ち時間で整理してみる事に。 まず unify-term の仕様 (というか実装) から。 t が var-term の場合 u が var-term 又は u に含まれる id に tid が無い場合は unit-subst 手続きに tid と u を渡した結果を戻す 上記の条件に合致しない場合、#f を戻す t …

EoPL reading (125) 2.3 Representation Strategies for Data Types

直前エントリで unify-terms が #f を戻すケイスを列挙してますが、引数リストの cdr がこうなってれば良いのか。ちなみに car は #f を戻さない、というのが基本。

EoPL reading (124) 2.3 Representation Strategies for Data Types

なんとなく目が覚めたので続行。

EoPL reading (123) 2.3 Representation Strategies for Data Types

Exercise 2.25 unify-terms を検討。 ts と us が両方同時に '() なら (empty-subst) を戻す ts あるいは us のどちらかが '() なら #f を戻す 以下。 (test* "(unify-terms '() '())" '(empty-subst-rec) (unify-terms '() '())) (test* "(unify-terms '() …

EoPL reading (122) 2.3 Representation Strategies for Data Types

Exercise 2.25 all-ids ってどっかで見たんだけどな、と思いつつ grep しても出てこなかった。テキストを遡ってみたら 2.10 にあるな。2.2 節はディレクトリ別にしてたので出てこなかったのか。以下なカンジ。 (add-load-path ".") (load "define-datatype")…

EoPL reading (121) 2.3 Representation Strategies for Data Types

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

EoPL reading (120) 2.3 Representation Strategies for Data Types

昨晩の続き。subst-in-terms です。 ぢつは仕事中、ってか休憩中に map 使えるぢゃん、ってコトに気づく。

EoPL reading (119) 2.3 Representation Strategies for Data Types

とりあえず、鍛錬をこつこつ続ける事に。高等数学きちんとヤッてないので scheme 使って計算云々な役立て方をイメージするのが微妙なんでしょうか。

EoPL reading (118) 2.3 Representation Strategies for Data Types

理解が微妙なまま進める、というのも手を動かし辛い。とりあえず昨晩のソレをビンゴと見てつき進むしかないな。

EoPL reading (117) 2.3 Representation Strategies for Data Types

Exercise 2.24 のつづき 直前エントリにて substitution なオブジェクトには置き換え対象の term と置換後の symbol が入ってて、渡された symbol と term の symbol が eqv? だったら置き換える、という理解。 と思ったんですが、逆かな、って思いはじめて…

EoPL reading (116) 2.3 Representation Strategies for Data Types

Exercise 2.24 のつづき 今日の晩メシ担当らしい。作成開始するまでの間で全体見つつ substitution を整理してみる。とりあえず最終的に作成する subst-in-term 手続きはイメージ的には以下なカンジになるのだろうか。 (define subst-in-term (lambda (s t) …

EoPL reading (115) 2.3 Representation Strategies for Data Types

Exercise 2.24 現実トウヒで以下なプロトタイプを作ってみた。

Ex 2.24

英語が読めん。てーか負け惜しみではないんですが substitutions なオブジェクトがどう動くのか、なイメージがナニ。 と言いつつ問題文の全体を眺めてみるに、難しく考えすぎてるのかな。

EoPL reading (114) 2.3 Representation Strategies for Data Types

Exercise 2.24 これ、英語を解読する時点で難解。ってか substitution なオブジェクトが何なのかがイメージできてない。BNF から考える必要あり、なのだろうか。

EoPL reading (113) 2.3 Representation Strategies for Data Types

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))…

EoPL reading (112) 2.3 Representation Strategies for Data Types

Exercise 2.21 検討前に思わず手が動いた。 $ gosh gosh> (cons '(() ()) '()) ((() ())) gosh> これはこれは。しかも問題解いてない (とほほ

EoPL reading (111) 2.3 Representation Strategies for Data Types

Exercise 2.20 用件済んだので次の問題に着手。2.17 ではメッセージパッシングで云々してます。これがいっちゃん楽、っていう固定概念をステないと駄目な気がしますが、とりあえず実装してみます。