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

What is the difference between Core_kernel.Heap and Core_kernel.FHeap?

Jane Street 的 Core_kernel 库有两个基于 pairing heaps 的堆实现:

Module Core_kernel.Heap

Heap implementation based on a pairing-heap.

(docs)

Module Core_kernel.Fheap

Functional heaps (implemented as pairing heaps).

(docs)

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

不同之处在于第二个引用中的 "Functional" 一词: Heap 是一个命令式实现,也可以通过例如的签名看出。 add 函数:

val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit

其中 returns unit,并修改现有堆。

另一方面,FHeap 是函数式的,这意味着像 add 这样的操作会创建新的对象,并保持原来的不变:在这种情况下,add 的签名是

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