camlp5:如何嵌套反引号

时间:2017-02-17 20:12:54

标签: ocaml camlp4

我正在使用带有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。当然我知道在这个特定的例子中我可以省略内部的反引号/引用对。这是不重要的;这是由于模拟示例中固有的过度简化。)

0 个答案:

没有答案