EoPL
ええと、gosh な REPL で問題の手続きを評価してみると同じ形で例外エラー。中身を見てみると以下な記述を発見。 (primapp-exp (prim rand1 rand2) (primapp-exp (subst rand1) (subst rand2)))))))これなのかな、ということで修正して再確認してみると Error…
またまたちょっとだけ。昨日の朝の続き。 問題点としては以下な模様。 渡す lambda な S 式は expression な形になっている必要あり parse すれば良いのか primapp-exp を expression.scm に追加 fresh_id.scm も修正必要 lexical-address と expression が…
またまたちょっとだけ。 設問の記述に沿って試験を書いてみます。
ちょっとだけ。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))みたい…
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…
(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 …
いちおう試験にはパス。問題に compare this version to the original solution とあるので確認してみることに。
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…
Ex.1.19 の free-vars および bound-vars はヤッツケ。とりあえずできあがりは GitHub に反映しといて Ex.2.8 に着手。 とりあえず occurs-free および occurs-bound と expression を定義なのか。expression は既存を流用。て、Ex.2.7 の定義を使うことに今…
今週は再び台風も接近しつつある中、色々と大変らしいのですが、昨晩同様気分転換に EoPL なナニでもごもごしようと思ってます。 とりあえず Ex.1.19 から着手。free-vars とか bound-vars を書け、とのこと。occurs-free? とか occurs-bound? の試験も書い…
たまにはこちらに現実トウヒ、ってここも不具合が直らない、で終わってる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…
標題をいい加減何とかしないと、と思いつつ。 とりあえず、 abstract syntax の定義 parse-expression の定義 unparse-expression の定義 を作ってみます。
留守番しつつ 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)…
若干標題が微妙な気がしますが当分これで続けてみます。 昨晩ですが、以前作成した lexical-address とその試験を手元に持ってきて動かしてみて、一応試験に成功するところまで確認しています。 つうかこれ abstract syntax 使え、ってありますね。で、これ…
コードを引用してるんだけど、これって GitHub あたりにあったりするのかなぁ。 確認してみたところ 無い。自分エントリをさらってみたところ、2009 年あたりにもごもごしている模様。2.2 節以降を再確認しつつ EoPL も再確認しつつ進めてみることに。
試験を書きかけて判明。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…
色々バタバタしてたので久々なカンジ。 Exercise 3.7 cons とか car とか cdr とか list の追加。
アタマが違う方面に行ってるのですが、明日向けのリハビリ、という事で無理矢理手を動かしてみます。 Exercise 3.6 ええと、scan&parse ではなく parse-program 使います。例示されているナニ的には以下なカンジでしょうか。 gosh> (run '(minus (+ (minus 5…
EoPL の練習問題をがっつりヤるか、GAE 方面にニゲるか、入門 Git に走るか悩ましいと言いつつ gdgd 続行。# 今 1300 Excersize 3.5 当分 primitive の追加な問題が続く。おそらくは parse-expression 手続き apply-primitive 手続き に分岐を追加をしてあげ…
早朝練習。 Exercise 3.4 REPL を使うのは手動で以下。
ええと、parse な試験は全部書けてはないはずなので検討。
直前エントリはダウトで終わったんですが、帰宅後に以下をでっち上げた。 (define parse-program (lambda (datum) (list 'a-program (parse-expression datum)))) (define parse-expression (lambda (datum) (cond ((number? datum) (list 'lit-exp datum)) …
とりあえず練習問題に手を付けてみます。 Exercise 3.3 eva-program 手続きがマトモに動けば良いはず。sllgen が不要なのでこちらを先に、な easy さをご容赦頂ければ幸いです。
昨晩の不具合は 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 …
とりあえず、scanner-spec-3-1 と grammar-3-1 を作ってみる。
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うーん。とりあえず頑…
Exercise 3.2 ええと問題の意図を微妙にはかりきれてなかったんですが、おそらくは SICP に出てくる normal-order evaluation と applicative-order evaluation の話と見ました。 あれは結果に影響があるケイスもあるはず。 この問題もこの程度で次行きます…
Figure 3.2 を実装してみる。Ex 3.1 は OK ってコトにしといて次に進む。
嫌も応も無く英語が読めんと微妙な世界に突入している模様。 Exercise 3.1 ええと、以下な実装にて
よく考えたら 2.4 でした。で試験も書いたので以下にて。