我正在使用带有MLast
模块的camlp5。我想知道嵌套深度大于1的反引号的语法。我将用模拟示例解释。假设我有
let f1 e = <:expr< 3 * $e$ >>
let f2 e = <:expr< $e$ + 1 >>
let f3 e = <:expr< $e$ / 2 >>
let f123 e = f3 (f2 (f1 e))
如何一次定义f123
?我只能做两部分
let f12 e = <:expr< $<:expr< 3 * \$e\$ >>$ + 1 >>
注意内部反引号中的强制反斜杠。但是三个部分?以下两种方法均无效:
let f123 e = <:expr< $<:expr< \$<:expr< 3* \$e\$ >>\$ + 1 >>$ / 2 >>
let f123 e = <:expr< $<:expr< \$<:expr< 3* \\$e\\$ >>\$ + 1 >>$ / 2 >>
let f123 e = <:expr< $<:expr< \$<:expr< 3* \\\$e\\\$ >>\$ + 1 >>$ / 2 >>
相应的错误消息是:
Uncaught exception: Pcaml.Qerror ("expr", 1, _)
Uncaught exception: Pcaml.Qerror ("expr", 1, _)
Parse error: end of input expected after [expr] (in [expr_eoi])
我无法在文档中找到任何内容。
(P.S。当然我知道在这个特定的例子中我可以省略内部的反引号/引用对。这是不重要的;这是由于模拟示例中固有的过度简化。)