【问题标题】:How do I save and change the value of a variable in OCaml?如何在 OCaml 中保存和更改变量的值?
【发布时间】:2012-04-17 15:36:50
【问题描述】:

这可能是一个非常新手的问题,但我没有找到答案。 例如,我需要存储一个列表,然后在同一个指针下将其替换为另一个。

【问题讨论】:

    标签: ocaml variable-assignment mutation


    【解决方案1】:

    可以通过references:

    let fact n =
      let result = ref 1 in (* initialize an int ref *)
      for i = 2 to n do
        result := i * !result (* reassign an int ref *)
       done;
      !result
    

    您不会经常看到引用,因为您可以在递归或高阶函数中使用不可变值来做同样的事情:

    let fact n =
       let rec loop i acc =
          if i > n then acc
          else loop (i+1) (i*acc) in
       loop 2 1
    

    首选无副作用的解决方案,因为它们更容易推理并且更容易确保正确性。

    【讨论】:

    • 谢谢。你能解释一下 ref 0 的含义吗?
    • 查看我在回答中引用的链接。基本上ref 0 是一条记录{mutable contents: int},其中contents0 初始化,contents 可以稍后重新分配。
    猜你喜欢
    • 2019-12-17
    • 2015-06-16
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2019-02-26
    相关资源
    最近更新 更多