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 でした。で試験も書いたので以下にて。