OCaml:双向引用

OCaml: Bidirectional reference

这是我写的一段代码。

    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表达式放到另一个表达式中,因为我认为它在逻辑上不太得体..

有人可以帮我解决这个问题吗?谢谢

使用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

您必须将函数定义为相互递归。这意味着您必须使用关键字 and 代替第二个 let。另见 https://ocaml.org/learn/tutorials/labels.html