【发布时间】:2020-09-08 19:48:35
【问题描述】:
我正在尝试使用 OCaml 类型声明来实现循环双向链表。这是我所拥有的:
type 'a cList =
{
mutable value : 'a;
mutable left : 'a cList option;
mutable right : 'a cList option
}
;;
当我需要声明包含单个元素的第一个列表时,问题就出现了。因为在分配之前无法引用元素,所以我无法让单元格的左右成员指向自身。 到目前为止,我唯一的解决方法是允许左右成员为 type 选项,将它们设置为 None,然后修改它们,使它们指向单元格本身。
let unitClist v = let a = {
value = v;
left = None;
right = None
}
in
a.left <- Some a;
a.right <- Some a;
a
;;
它可以工作,但是当您确定有一个值时,必须使用选项类型有点绑定。 有更好的方法吗? 提前致谢。
【问题讨论】:
-
我认为这正是应该通过将
let替换为let rec而消失的问题?
标签: data-structures ocaml doubly-linked-list circular-list