Functional programming OCaml-不递归地遍历列表

Functional programming OCaml-不递归地遍历列表,functional-programming,ocaml,Functional Programming,Ocaml,我正在尝试编写以下没有递归的代码: let rec traverse lst = match lst with |a::b::t -> (* Something that return None*) traverse (b::t) | _ -> () 如何以命令式方式进行?以命令式方式: let traverse li = let state = ref li in while !state <> [] do let x

我正在尝试编写以下没有递归的代码:

let rec traverse lst =
   match lst with
  |a::b::t ->
     (* Something that return None*)
     traverse (b::t)
  | _ -> ()
如何以命令式方式进行?

以命令式方式:

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
li=
设state=ref li in
虽然国家[]做
让x=List.hd!州
状态:=List.tl!国家;
(*想做什么就做什么*)
完成
如果需要访问列表的第二个元素,只需使用相应的
list.hd
调用即可。但您可能需要先检查列表是否为空

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

以一种强制性的方式:

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
li=
设state=ref li in
虽然国家[]做
让x=List.hd!州
状态:=List.tl!国家;
(*想做什么就做什么*)
完成
如果需要访问列表的第二个元素,只需使用相应的
list.hd
调用即可。但您可能需要先检查列表是否为空


我看不出有什么理由这样做,这比递归循环更重、效率更低、灵活性更低。

好吧,但当我试图编写递归(正如我在上一篇文章中所写)时,我会出错。我没有看过你以前的文章,但也许你应该更加努力?好吧,但当我试图编写递归(正如我在上一篇文章中所写)时我得到一个错误。我没有看到你以前的帖子,但也许你应该更努力一点?请注意,没有一个是类型为“a选项”的Ocaml值,它不同于unit(即())。因此,您的评论(*返回None*)是不正确的!请注意,None是类型为“a选项”的Ocaml值,它不同于unit(即())。因此,您的评论(*返回None*)是不正确的!