Pyg*_*ion 4 reverse ocaml functional-programming list append
我是OCaml的新手,并试图将其List.append作为一项学习练习.这就是我所拥有的:
let rec append a b =
match (List.rev a) with
[] -> b
| x:: xs -> append xs (x::b)
Run Code Online (Sandbox Code Playgroud)
这似乎有效,直到论证a有两个以上的元素.例:
# append [1;2] [3;4]
- : int list = [1; 2; 3; 4]
# append [1;2;3] [4;5;6]
- : int list = [2; 1; 3; 4; 5; 6]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我已经检查过了,然后List.rev [1;2;3]回来了int list = [3; 2; 1].我知道我的实现是天真的,而不是(还)懒惰,但它似乎应该工作.
Jef*_*eld 11
如果你考虑一下,你会反复你的第一个清单很多次.可能比你想要的还要多.
如果您按照示例的步骤操作,您可以看到发生了什么.
append [1; 2; 3] []
(* match binds x to 3, xs to [2; 1] *)
append [2; 1] [3]
(* match binds x to 1, xs to [2] *)
append [2] [1; 3]
(* match binds x to 2, xs to [] *)
append [] [2; 1; 3]
(* done *)
Run Code Online (Sandbox Code Playgroud)