DSLうんぬん。define-syntaxをやるには、、、。

えーと、いろいろ思い出してみて、
結局のところ、去年のshelarcyさんのコメントが非常にありがたいのでこの辺を
もう一度読んでみます。去年見たときは何がなんだかだった覚えがあるのだけど。

# shelarcy 『DSL Implementation in MetaOCaml, Template Haskell, and C++ (http://www.cs.rice.edu/~taha/publications/preprints/2003-12-01.pdf) を読めば分かると思うけど、メタプログラミングをサポートするなら構文ツリーを弄る以前に quote で評価を遅延させて unquote でqupte を評価させる仕組みを作るのが基本。また On Lisp (http://user.ecc.u-tokyo.ac.jp/~g340299/#lisp_onlisp) を読めば分かるけど、変数のスコープを Lisp みたいに曖昧にしていいのか、Scheme みたいに書きにくいメタプログラミングがあることを覚悟の上で hygiene にするかも考える必要があります。あとメタプログラミングのコードをどうやってデバッグしやすいものにするかという視点も重要。Template Haskell だとこれはコンパイラにエラーを出させる仕組みを用意したりすることで対処しようとしてるけど。 http://page.freett.com/shelarcy/diary_2004-03.html#generative_haskell』

# shelarcy 『個人的には C-- とか Cyclone などの C の言語の素性の悪さを改善しようとしているプロジェクトの血を全く受け継いでいないところが悔しかったり。あと Haskell やっていると最後まできたところで処理を終了させることを約束事にすればいいんだから、break いらないんじゃないかという気がしてきます。

C-- 
http://www.cminusminus.org/ 

Cyclone 
http://www.research.att.com/projects/cyclone/

Scheme:なぜSchemeにはreturnが無いのか 
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3a%a4%ca%a4%bcScheme%a4%cb%a4%cfreturn%a4%ac%cc%b5%a4%a4%a4%ce%a4%a

4 Case 式とパターン照合
http://www.sampou.org/haskell/tutorial-j/patterns.html

7.5 Haskell と命令型プログラミング
http://www.sampou.org/haskell/tutorial-j/io.html#sect7.5』