gpt4 book ai didi

haskell - 在 Haskell quasiquoter 中拼接任意表达式

转载 作者:行者123 更新时间:2023-12-04 15:45:58 24 4
gpt4 key购买 nike

通读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[:lam| ... |] 之外完成, 这是因为函数 antiVarE在第 3.2 节中构建一个 TH.varE出变量名。

我的问题是需要多少工作才能支持除了变量名之外的任意表达式拼接?

例如:
subst [:lam | $exp:e1 $exp:e2 |] x y =
[:lam | $exp:(subst e1 x y) $exp:(subst e2 x y) |]

最佳答案

为后代回答我自己的问题。

原来这很简单。使用 parseExp haskell-src-meta中的函数包我能够轻松地将字符串转换为 AST 片段。

在原始论文中,除了捕获括号之间的表达式字符串所需的解析器更改之外,antiExpE函数可以这样重写。

antiExpE :: Exp -> Maybe TH.ExpQ
antiExpE (AE v) =
case parseExp v of
Right exp -> Just . return $ exp
Left _ -> Nothing
antiExpE = Nothing

关于haskell - 在 Haskell quasiquoter 中拼接任意表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com