在OCaml中分隔一个列表

JBa*_*low 1 ocaml list

所以我有一个列表,我试图分成两个列表,这样原始列表中的所有偶数索引组成第一个列表,奇数索引组成第二个列表.这是我尝试解决方案,但它没有正确返回:

let rec separate xs =
  match xs with
    [] -> [],[]
  | x::y::xs -> x::separate xs, y::separate xs
  | x::[] -> x:: separate [], separate [];;
Run Code Online (Sandbox Code Playgroud)

jro*_*uie 7

问题是separate返回一对列表,而当你编写时,x::separate xs你假设它返回一个列表(你预先添加x).此外,在这种情况下x::[],您已经知道结果,无需递归调用separate.

产量:

let rec separate xs =
    match xs with
  | x::y::tail ->
        let a,b = separate tail in
        x::a, y::b
  | x::[] -> [x],[]
  | [] -> [],[];;
Run Code Online (Sandbox Code Playgroud)

(如果您发布更多问题,请将您的代码发布在多行而不是一行,并附加缩进).