Syntax OCaml共享变量

Syntax OCaml共享变量,syntax,ocaml,Syntax,Ocaml,我希望创建两个函数:第一个函数生成一个新的整数,第二个函数重置生成器 let a = ref 0 in let f () = a := !a + 1 and g () = a := 0; ();; REPL在最后两个分号上显示“Error:Syntax Error”。第二个let后面还需要在中加一个(参见),例如 但也许你想要更像这样的东西: let new_counter () = let a = ref 0 in let f () = a := !a + 1;

我希望创建两个函数:第一个函数生成一个新的整数,第二个函数重置生成器

let a = ref 0 in
    let f () = a := !a + 1 and  
    g () = a := 0; ();;

REPL在最后两个分号上显示“Error:Syntax Error”。

第二个
let
后面还需要在
中加一个
(参见),例如

但也许你想要更像这样的东西:

let new_counter () =
  let a = ref 0 in
  let f () = a := !a + 1; !a
  and g () = a := 0
  in (f, g);;

第二个
let
后面还需要在
中加一个
(参见),例如

但也许你想要更像这样的东西:

let new_counter () =
  let a = ref 0 in
  let f () = a := !a + 1; !a
  and g () = a := 0
  in (f, g);;

我刚刚尝试了你的代码,但它没有在全局范围内声明f和g。我只想给多个函数一个共享引用,然后在全局范围内调用它们。这是怎么回事?您可能还需要一个函数来获取
a
的值。还是应该在全球范围内?对不起!我忘了f是unit->int。代码是
let f()=a:=!a+1!a
它可以工作!谢谢你,我认为这是解决我的问题的好方法。我刚刚尝试了你的代码,但它没有在全局范围内声明f和g。我只想给多个函数一个共享引用,然后在全局范围内调用它们。这是怎么回事?您可能还需要一个函数来获取
a
的值。还是应该在全球范围内?对不起!我忘了f是unit->int。代码是
let f()=a:=!a+1!a
它可以工作!谢谢你,我认为这是解决我问题的好办法