Gauche > Archives > 2009/12/16

2009/12/16 01:09:27 UTC(び)
#
ネクサスと聞くと、どうしてもTV番組制作会社が思い浮かぶ
#
現CR-NEXUS(と言っていいのか?)
2009/12/16 01:20:12 UTCshiro
#
inliningは定数畳み込みとの連鎖が決まると気持ちいいコードを吐いてくれるが、コンボが決まらないとコードサイズが膨れ上がるという弊害があるなあ。
#
「部分評価が効きそうな時だけインライン展開する」みたいな指示ができるといいんだろか。
2009/12/16 07:15:24 UTCshiro
#
hygienic macroも、ちょっと上に書いた「舞台裏」の話と関係するような気がする。syntax-caseの世界では、macro transformerに渡される値は元のプログラムのS式にsyntacticな情報を付加したものだ。任意のS式をx、情報を付加した式を Syntax x と考えれば、syntax-caseのプリミティブは次のような型を持つことになる。
#
syntax->datum :: Syntax x -> x
syntax        :: x -> Syntax x
datum->syntax :: (Syntax Id, x) -> Syntax x
#
あとsyntax-case自体はパターンマッチ時にSyntaxを必要に応じて取り除く。例えば Syntax (a, b) -> (Syntax a, Syntax b)とか。
#
通常のLispのマクロは、プログラムのS式そのものを自由に扱える。つまりxのドメインでいろいろしたい。syntax caseのぎこちなさというのは、Syntax xの世界とxの世界を行き来しないとならないところにある。
#
補助的な型情報を使って、この舞台裏の操作をうまいぐあいに隠すことはできるだろうか? 例えば、 car :: a -> b な「生のS式」の世界の手続きがSyntax aに適用されたら、自動的に Syntax a -> Syntax b になるような関数へと持ち上げてやるのだ。