OCaml:双向参考

时间:2015-06-25 21:08:40

标签: ocaml

这是我写的代码片段。

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

有人能就这个问题给我一些帮助吗?感谢

2 个答案:

答案 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