- letが引数一つ
- cond、letrec等の必要そうな構文がない(condはif文で書きかえれるけど・・・)
- quoteしたものも正規化する
1. letが変数一つって扱い難いので複数取るように変更。(let (<binds>) <body>)というが普通のletなのでこれを取るようにし、<binds>の(変数 値)という式を一つずつ正規化後letを再構築。
2. condは
(cond (<pred1> <then1>) (<pred2> <then2>) (else <then>)という式なので、pred1 ... pred2をこんな感じに
(let ((p1 (normalize <pred1>))) ; 以下predの数だけっでthenを正規化してcondを再構築。
letrecとletrec*はバインド変数だけ正規化してそのまま放置。とりあえずこれでいいか?
3. オリジナルは(display 'a)というのが(let ((r 'a)) (display r))ってなってたので、さすがにあほらしいかと思い、quoteは正規化しないことにした。
っで、とりあえず3impのコンパイラでコンパイルしてみた。
おぉ、コンパイルできた。
っが、コンパイラにletをコンパイルする記述はない・・・さて、考えるか・・・
No comments:
Post a Comment