通读Why It's Nice to be Quoted,在第 3 节中,有一个在 quasiquote 中拼接变量标识符的示例。
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
是在外部完成的[:lam| ... |]
,这是因为第 3.2 节中的函数从变量名中antiVarE
构建了TH.varE
我的问题是需要多少工作才能支持除了变量名之外的任意表达式拼接?
例如:
subst [:lam | $exp:e1 $exp:e2 |] x y =
[:lam | $exp:(subst e1 x y) $exp:(subst e2 x y) |]