Functional programming 在OCaml中,如何存储;“指针”;要删除列表中的元素吗?

Functional programming 在OCaml中,如何存储;“指针”;要删除列表中的元素吗?,functional-programming,ocaml,Functional Programming,Ocaml,我有一些数据类型的列表。但是,我还希望使用trie对该列表的元素进行索引,以便能够进行更高效的查找。但是我不想存储相同的元素两次,所以我想在列表中存储元素,在trie中,我在叶节点中存储指向元素的指针。这可能吗?我可以将元素的索引存储在列表中,但是通过索引获取链接列表的元素的速度很慢,所以这样做不行 如果这是对OCaml内存模型的误解,请道歉 只需存储元素即可。在引擎盖下,这不会复制值,它只是复制一个指向该值的指针,除了存储在单个内存字中的值(就像指针一样) 换句话说,像让b=a不要复制a。它们

我有一些数据类型的列表。但是,我还希望使用trie对该列表的元素进行索引,以便能够进行更高效的查找。但是我不想存储相同的元素两次,所以我想在列表中存储元素,在trie中,我在叶节点中存储指向元素的指针。这可能吗?我可以将元素的索引存储在列表中,但是通过索引获取链接列表的元素的速度很慢,所以这样做不行


如果这是对OCaml内存模型的误解,请道歉

只需存储元素即可。在引擎盖下,这不会复制值,它只是复制一个指向该值的指针,除了存储在单个内存字中的值(就像指针一样)

换句话说,像
让b=a
不要复制
a
。它们使
b
成为
a
的别名


值在Ocaml中自动共享。唯一不希望共享的情况是可变对象(引用、结构或具有可变字段的对象)。如果您想要两个具有相同当前值的可变对象,但赋值只会影响其中一个对象,那么您需要制作一个副本。

是否反对使用映射存储元素?我需要按添加顺序存储元素(如堆栈)。但我还需要使用trie高效地索引,在OCaml中,我们只有指向块和立即值的指针。如果这正是你所担心的,那么在传递价值观时,没有什么特别的事情可以保护共享。数组、记录等块永远不会被隐式复制,因为我们只操作指向它们的指针。