这是我写的代码片段。
let trans_binop _ =
let l = trans_exp lexp in
B.binop_build op l r
let trans_exp exp =
match exp with
| _->
trans_binop binop
以上代码已简化。这两个函数在一个Module
内定义。问题是:第一个函数需要引用第二个函数,而第二个函数需要引用第一个函数.. 然后它就是无法编译。
我基本上不想把一个let
表达式放到另一个表达式中,因为我认为它在逻辑上不合适..
有人能就这个问题给我一些帮助吗?感谢
答案 0 :(得分:3)
使用and
声明相互递归的函数
let rec trans_binop _ =
let l = trans_exp lexp in
B.binop_build op l r
and trans_exp exp =
match exp with
| _->
trans_binop binop
答案 1 :(得分:3)
您必须将函数定义为相互递归。这意味着您必须在第二个and
的位置使用关键字let
。另请参阅https://ocaml.org/learn/tutorials/labels.html