在OCaml中,如何将“指针”存储到列表的元素?

时间:2018-07-21 20:38:46

标签: functional-programming ocaml

我有一些数据类型的列表。但是,我也想使用特里索引该列表的元素,这样我可以进行更有效的查找。但是我不想将相同的元素存储两次,所以我想将元素存储在列表中,并且在trie中,将指向元素的指针存储在叶节点中。这可能吗?我可以将元素的索引存储在列表中,但是按索引获取链接列表的元素很慢,因此不会。

很抱歉,这是对OCaml内存模型的误解。

1 个答案:

答案 0 :(得分:2)

只需存储元素。在幕后,这不会复制值,只是将指针复制到该值,除了存储在单个存储字中的值(就像指针一样)。

换句话说,诸如let b = a之类的东西不会复制a。它们使b成为a的别名。

值在Ocaml中自动共享。唯一不希望共享的情况是可变对象(引用或具有可变字段的结构或对象)。如果要使两个可变对象具有相同的当前值,但赋值仅影响其中一个对象,则需要进行复制。