1

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

let rec separate xs =
  match xs with
    [] -> [],[]
  | x::y::xs -> x::separate xs, y::separate xs
  | x::[] -> x:: separate [], separate [];;
4

1 回答 1

8

问题是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],[]
  | [] -> [],[];;

(如果您发布更多问题,请将您的代码发布在多行而不是仅一行,并带有缩进)。

于 2012-09-12T07:13:59.027 回答