将列表转换为队列

时间:2013-02-23 18:57:00

标签: list queue ocaml

如何将列表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

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,你有一个可变的队列类型。

强制处理列表的惯用方法是使用List.iter

在我看来,你正计划编写自己的递归函数loop来代替这样做(可能因为这是作业)。第一个注释是,在编写这样的命令式代码时,惯用的事情是返回()(类型unit的唯一值)而不是None。您的loop函数将始终返回(),因为它通过修改队列(命令性地)来工作。

你必须回答递归的问题(我总是指出):

  • 您需要为空列表做什么?

  • 如果列表非空,那么你的头尾需要做什么?

当被问到这种方式时,答案似乎很明显。但如果没有,可能的提示是你要调用你已经知道的两个函数,一个用于头部,一个用于列表的尾部。