2014-03-01から1ヶ月間の記事一覧

伝統的マクロ

quasiquoteが動いたので、伝統的マクロを実装してみた。展開して評価できるところまで動いた。evalExpのパターンマッチにMacroAppExp節を追加。 let rec evalExp env = function | MacroAppExp (id, sexps) -> let args = List.map evalQuote sexps and m = …

quasiquote続き

やはりテストケースに漏れがあった。ネストとdotted list表記の組み合わせでおかしな結果になっていた。 (define (qq7-6 name1) `(a b . `,,name1)) (qq7-6 'x) => (a b a b quasiquote ,x) では期待結果はなにか、ということで調べてみると、微妙なことにな…

quasiquote

quasiquoteがなんとか動いた。quasiquoteのネストレベルの増減をどう追跡すべきかは初期段階で明白ではなかった。dot表記が混じった場合、 `((foo ,(- 10 3)) ,@(cdr '(c)) . ,(car '(cons))) 現状のs式パーサが (a b . (unquote x)) を (a b unquote x) (O…

最近の変更点

勉強を再開してからの主な変更点 sicp 4.1.7のanalyze評価器 valtype/envがeval評価器とanalyze評価器それぞれに存在したのを共通化 * primitiveを、新しいvaltype/envに対応させて、個別に存在したのを共通化 S式コメント (srfi 62) delay/force primitive…

simple Scheme interpreter in OCaml

OCamlで、lexicical scopeのclosureをもつプログラミング言語の処理系の作成をする演習などがあります。*1*2*3*4 これらを参考にして、schemeのインタープリタを勉強していたものの、長らく置いていたコードに再び手を入れていこうということで。 ogurat/osc…