Jane Street 的 Core_kernel 库有两个基于配对堆的堆实现:
模块 Core_kernel.Heap
基于配对堆的堆实现。
(文档)
模块 Core_kernel.Fheap
功能堆(实现为配对堆)。
(文档)
从描述中,我不清楚它们之间有什么区别。我什么时候会使用其中一种?
区别在于您的第二个引用中的“功能”一词: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)