如何将列表v1 :: v2 :: vn :: []转换为队列? 这是我迄今为止所写的全部内容: -
let fromList (l:'a list) : 'a queue =
let queue = create () in
let rec loop (z: 'a list) (q: 'a queue) : 'a queue =
begin match z with
| [] -> None
| hd :: tl ->
end
谢谢!
答案 0 :(得分:1)
好的,你有一个可变的队列类型。
强制处理列表的惯用方法是使用List.iter
。
在我看来,你正计划编写自己的递归函数loop
来代替这样做(可能因为这是作业)。第一个注释是,在编写这样的命令式代码时,惯用的事情是返回()
(类型unit
的唯一值)而不是None
。您的loop
函数将始终返回()
,因为它通过修改队列(命令性地)来工作。
你必须回答递归的问题(我总是指出):
您需要为空列表做什么?
如果列表非空,那么你的头尾需要做什么?
当被问到这种方式时,答案似乎很明显。但如果没有,可能的提示是你要调用你已经知道的两个函数,一个用于头部,一个用于列表的尾部。