【问题标题】:How to declare a reference to a empty stack in OCaml?如何在 OCaml 中声明对空堆栈的引用?
【发布时间】:2015-05-04 19:46:23
【问题描述】:

也许我在这里很愚蠢,所以我想问的更普遍的问题是如何在 OCaml 中声明对某个类型的空值的引用。通常我声明对自定义定义的空值的引用,例如,如果我有一个类型type point = Point of (int * int),我会声明像这样let a = ref (Point (0,0)) 的引用。然而,这并不令人满意,因为我必须自己“拿出”一个空值。此外,如果您查看标准库中的引用“堆栈”模块(http://caml.inria.fr/pub/docs/manual-ocaml/libref/Stack.html),在它。你如何处理这个?

【问题讨论】:

    标签: reference ocaml imperative-programming


    【解决方案1】:

    如果你真的想要,你可以这样做:

    let sr = ref (Stack.create ())
    let () = Stack.push 42 !sr
    

    OCaml 的值限制不会阻止它,它最初将具有类型 '_a Stack.t ref,直到您将其推入。

    但是你几乎不需要它,Stack 已经是可变的了。

    【讨论】:

    • (如果你想要一个不可变的堆栈,你可以只使用一个列表。)
    【解决方案2】:

    好吧,堆栈有一个空值,因为Stack.create () 将创建一个空堆栈。关于您的一般问题,通常None 用作空值。当然,这会自动将您的价值提升为选项。但这是故意的,因为如果您创建一个空值,然后您将更新它,尽管引用没有类型保证,但您将永远更新它。

    例子

    let p0 = ref None in
    ...
    p0 := Some (Point (0,0));
    ...
    

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 2016-02-04
      • 2018-06-13
      • 2017-06-01
      • 2014-03-09
      • 2020-08-02
      • 1970-01-01
      • 2014-01-22
      • 2012-09-10
      相关资源
      最近更新 更多