首页 > 解决方案 > OCaml:两个函数的内部“让”

问题描述

我想做内部“让”,但有两个功能。

我现在有一个功能

let fresh_var () =
let r = ref 0 in
r := !r + 1 ; Var !r;;

我想添加第二个函数,以便它可以更改 r,但 r 对于程序的其余部分保持不可见。就像是:

let r = ref 0 in 
let fresh_var () = r := !r + 1 ; Var !r
and let refresh () = r := 0

但是由于语法错误,上面的部分不起作用。

如何在 OCaml 中实现这个想法?

标签: ocamllet

解决方案


您可以简单地创建一个返回一对函数的函数:

let get_fresh_and_reset () =
  let r = ref 0 in
  (fun () -> incr r; !r), (fun () -> r := 0)

let fresh, reset = get_fresh_and_reset ()

另请注意,正确的语法 is:=和 not =:

编辑:

正如@Virgile提到的,如果您不需要多个计数器,则可以简化:

let fresh_var, refresh =
    let r = ref 0 in (fun () -> incr r; !r), (fun () -> r:=0)

推荐阅读