Core_kernel.Heap 和 Core_kernel.FHeap 有什么区别?

ESR*_*ogs 2 ocaml ocaml-core

Jane Street 的 Core_kernel 库有两个基于配对堆的堆实现:

模块 Core_kernel.Heap

基于配对堆的堆实现。

文档

模块 Core_kernel.Fheap

功能堆(实现为配对堆)。

文档

从描述中,我不清楚它们之间有什么区别。我什么时候会使用其中一种?

Vir*_*ile 5

区别在于您的第二个引用中的“功能”一词:Heap是一个命令式实现,也可以通过例如add函数的签名看出:

val add : 'a t ?> 'a ?> Core_kernel__.Import.unit
Run Code Online (Sandbox Code Playgroud)

它返回unit,并就地修改现有堆。

另一方面FHeap是函数式的,这意味着诸如 add 之类的操作将创建新对象,而原始对象保持不变:在这种情况下, add 的签名是

val add : 'a t ?> 'a ?> 'a t
Run Code Online (Sandbox Code Playgroud)