我有一些数据类型的列表。但是,我还想用 trie 索引该列表的元素,这样我就可以进行更有效的查找。但我不想将相同的元素存储两次,因此我想将元素存储在列表中,并在 trie 中将指向元素的指针存储在叶节点中。这可能吗?我可以将元素的索引存储在列表中,但是通过索引获取链表的元素很慢,所以这是行不通的。
如果这是对 OCaml 内存模型的误解,我们深表歉意。
最佳答案
只存储元素。在底层,这不会复制值,它只是复制指向该值的指针,存储在单个内存字中的值除外(就像指针一样)。
换句话说,let b = a
之类的东西不会复制a
。他们使 b
成为 a
的别名。
值会在 Ocaml 中自动共享。您不希望共享的唯一情况是可变对象(引用、具有可变字段的结构或对象)。如果您想要两个可变对象具有相同的当前值,但赋值只会影响其中一个对象,那么您需要复制一份。
关于functional-programming - 在 OCaml 中,如何将 "pointers"存储到列表的元素中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459937/