OCaml - 遍历列表而不递归

时间:2013-12-03 08:21:20

标签: functional-programming ocaml

我正在尝试编写以下代码而不进行递归:

let rec traverse lst =
   match lst with
  |a::b::t ->
     (* Something that return None*)
     traverse (b::t)
  | _ -> ()

如何以势在必行的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

以势在必行的方式:

let traverse li =
  let state = ref li in
  while !state <> [] do
    let x = List.hd !state in
    state := List.tl !state;
    (* do whatever you want *)
  done

如果您需要访问列表的第二个元素,只需使用相应的List.hd调用即可。但您可能需要先检查列表是否为空。

我认为没有理由这样做,这比递归循环更重,效率更低,灵活性更低。