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*)是不正确的!