functional-programming - 在 OCaml 中,如何将 "pointers"存储到列表的元素中?

标签 functional-programming ocaml

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

如果这是对 OCaml 内存模型的误解,我们深表歉意。

最佳答案

只存储元素。在底层,这不会复制值,它只是复制指向该值的指针,存储在单个内存字中的值除外(就像指针一样)。

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

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

关于functional-programming - 在 OCaml 中,如何将 "pointers"存储到列表的元素中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459937/

相关文章:

javascript - React - useState 和 Firebase 的问题

.net - F# 允许在受歧视的联盟中相互引用案例吗?

Scala 在编写函数文字时通过下划线部分应用

string - 使用 scanf 在非空白分隔符上拆分字符串

types - OCaml - 创建自定义类型的自定义类型

compilation - 有没有一起生成 .cmo .cmx .cmi .mli 的命令?

javascript - 如何使用 lodash 中的 includes 方法检查对象是否在集合中?

c++ - 如何为泛型函数定义 std::function?

functional-programming - ocaml 中 2 个列表的乘积(不带命令式函数)

functional-programming - OCaml中的fold_tree