gpt4 book ai didi

types - 在 F# 中实现队列类型

转载 作者:行者123 更新时间:2023-12-02 00:35:46 24 4
gpt4 key购买 nike

我正在尝试在 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);;

除了 enque 之外,其他操作都工作正常,我想让它能够将新元素添加到队列的后面而不是前面。

最佳答案

功能队列的规范方法是拥有两个列表,这会导致摊销 O(1) 访问:

type queue<'a> =
| Queue of 'a list * 'a list

let empty = Queue([], [])

let enqueue q e =
match q with
| Queue(fs, bs) -> Queue(e :: fs, bs)

let dequeue q =
match q with
| Queue([], []) -> failwith "Empty queue!"
| Queue(fs, b :: bs) -> b, Queue(fs, bs)
| Queue(fs, []) ->
let bs = List.rev fs
bs.Head, Queue([], bs.Tail)

关于types - 在 F# 中实现队列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33464319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com