Ocaml Core_kernel.Heap和Core_kernel.FHeap之间有什么区别?

Ocaml Core_kernel.Heap和Core_kernel.FHeap之间有什么区别?,ocaml,ocaml-core,Ocaml,Ocaml Core,Jane Street的Core_内核库有两个基于以下内容的堆实现: 模块Core\u kernel.Heap 基于配对堆的堆实现 () 模块Core\u kernel.Fheap 功能堆(作为配对堆实现) () 从描述来看,我不清楚它们之间有什么区别。什么时候使用一个或另一个?区别在于您第二句话中的“功能性”一词:Heap是一个强制实现,也可以通过签名看到,例如add函数: val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit 它返回

Jane Street的Core_内核库有两个基于以下内容的堆实现:

模块Core\u kernel.Heap 基于配对堆的堆实现

()

模块Core\u kernel.Fheap 功能堆(作为配对堆实现)

()


从描述来看,我不清楚它们之间有什么区别。什么时候使用一个或另一个?

区别在于您第二句话中的“功能性”一词:
Heap
是一个强制实现,也可以通过签名看到,例如
add
函数:

val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit
它返回
单元
,并就地修改现有堆

另一方面,
FHeap
是功能性的,这意味着像add这样的操作将创建新对象,保留原始对象不变:在这种情况下,add的签名是

val add : 'a t ‑> 'a ‑> 'a t