所以我有一个列表,我试图将它分成两个列表,这样原始列表中的所有偶数索引组成第一个列表,奇数索引组成第二个列表。这是我对解决方案的尝试,但它没有正确返回:
let rec separate xs =
match xs with
[] -> [],[]
| x::y::xs -> x::separate xs, y::separate xs
| x::[] -> x:: separate [], separate [];;
问题是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],[]
| [] -> [],[];;
(如果您发布更多问题,请将您的代码发布在多行而不是仅一行,并带有缩进)。