所以我有一个列表,我试图分成两个列表,这样原始列表中的所有偶数索引组成第一个列表,奇数索引组成第二个列表.这是我尝试解决方案,但它没有正确返回:
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)
问题是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)
(如果您发布更多问题,请将您的代码发布在多行而不是一行,并附加缩进).