Jane Street 的 Core_kernel 库有两个基于配对堆的堆实现:
模块Core_kernel。堆
基于配对堆的堆实现。
(文档)
模块Core_kernel。噶噗噗
函数堆(作为配对堆实现)。
(文档)
从描述中,我不清楚它们之间有什么区别。我什么时候会使用其中一个?
区别在于您的第二个引号中的"功能"一词:Heap
是一个命令式实现,这也可以通过例如add
函数的签名看出:
val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit
它返回unit
,并就地修改现有堆。
另一方面,FHeap
是功能性的,这意味着诸如 add 之类的操作将创建新对象,而原始对象保持不变:在这种情况下,add 的签名是
val add : 'a t ‑> 'a ‑> 'a t