我正在尝试在F#中实现一个队列到目前为止这是我所拥有的,但我认为它的行为更像是一个堆栈:
type 'a queue = NL| Que of 'a * 'a queue;;
let enque m = function
|NL -> Que(m, NL)
|Que(x, xs) -> Que(m, Que(x, xs));;
let rec peek = function
|NL -> failwith "queue is empty"
|Que(x, xs) -> x;;
let rec deque = function
|NL -> failwith "queue is empty"
|Que(x, xs) -> xs;;
let rec build = function
| [] -> NL
| x::xs -> enque x (build xs);;
Run Code Online (Sandbox Code Playgroud)
除了enque之外,这些操作工作正常,我想这样做,因此它在队列的后面而不是前面添加了一个新元素.
Haskell 有标准的队列实现吗?我看到几个相当成熟的优先级队列实现,但没有简单的队列。Data.Sequence 看起来不错,但我认为我们可以使用更受限制的数据类型获得更好的性能。此外,限制操作(即不是双端队列)可以防止错误从错误的一端出队。
编辑:
澄清一下,我希望有一个成熟的 Haskell 实现,最好是在 Haskell Platform 或 Hackage 中。