Why It's Nice to be Quoted を読んで、セクション 3 に準引用符で変数識別子をスプライシングする例があります。
subst [:lam | $exp:e1 $exp:e2 |] x y =
let e1' = subst e1 x y
e2' = subst e2 x y
in
[:lam | $exp:e1' $exp:e2' |]
subst
への再帰呼び出しが の外で行われる理由がわかりました。これは、セクション 3.2[:lam| ... |]
の関数が変数名から を構築するためです。antiVarE
TH.varE
私の質問は、変数名だけでなく、任意の式のスプライスをサポートするためにどれだけの作業が必要になるかということです?
例えば:
subst [:lam | $exp:e1 $exp:e2 |] x y =
[:lam | $exp:(subst e1 x y) $exp:(subst e2 x y) |]