我有一些数据类型的列表。但是,我也想使用特里索引该列表的元素,这样我可以进行更有效的查找。但是我不想将相同的元素存储两次,所以我想将元素存储在列表中,并且在trie中,将指向元素的指针存储在叶节点中。这可能吗?我可以将元素的索引存储在列表中,但是按索引获取链接列表的元素很慢,因此不会。
很抱歉,这是对OCaml内存模型的误解。
答案 0 :(得分:2)
只需存储元素。在幕后,这不会复制值,只是将指针复制到该值,除了存储在单个存储字中的值(就像指针一样)。
换句话说,诸如let b = a
之类的东西不会复制a
。它们使b
成为a
的别名。
值在Ocaml中自动共享。唯一不希望共享的情况是可变对象(引用或具有可变字段的结构或对象)。如果要使两个可变对象具有相同的当前值,但赋值仅影响其中一个对象,则需要进行复制。