0

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

谢谢!

4

1 回答 1

1

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

命令式处理列表的惯用方式是使用List.iter.

在我看来,您打算编写自己的递归函数loop来代替(可能是因为这是家庭作业)。第一条评论是,在编写这样的命令式代码时,惯用的做法是返回()( type 的唯一值unit)而不是None. 您的loop函数将始终返回(),因为它通过修改队列(必须)来工作。

您必须回答的递归问题(正如我一直指出的那样)是:

  • 空列表需要做什么?

  • 如果列表非空,你需要对它的头部和尾部做什么?

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

于 2013-02-23T19:58:39.677 回答