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
这是我写的一段代码。
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