Jane Street的Core_kernel库有两个基于pairing heaps的堆实现:
模块Core_kernel.Heap
基于配对堆的堆实现。
(docs)
模块Core_kernel.Fheap
功能堆(作为配对堆实现)。
(docs)
从描述中,我不清楚它们之间的区别。我何时会使用其中一个?
答案 0 :(得分:4)
差异在于你的第二句话中的“功能”一词:Heap
是一种必要的实施方式,也可以通过例如add
函数:
val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit
返回unit
,并修改现有堆。
另一方面,FHeap
是有用的,这意味着诸如add之类的操作将创建新对象,使原始对象完整:在这种情况下,add的签名是
val add : 'a t ‑> 'a ‑> 'a t