List 用OCaml分隔一个列表
所以我有一个列表,我试图把它分成两个列表,这样原始列表中的所有偶数索引组成第一个列表,奇数索引组成第二个列表。以下是我尝试的解决方案,但没有正确返回:List 用OCaml分隔一个列表,list,ocaml,List,Ocaml,所以我有一个列表,我试图把它分成两个列表,这样原始列表中的所有偶数索引组成第一个列表,奇数索引组成第二个列表。以下是我尝试的解决方案,但没有正确返回: let rec separate xs = match xs with [] -> [],[] | x::y::xs -> x::separate xs, y::separate xs | x::[] -> x:: separate [], separate [];; 问题是,separate返回一对列表,
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],[]
| [] -> [],[];;
(如果您发布更多问题,请在几行而不是一行上发布代码,并带有缩进)。问题是
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],[]
| [] -> [],[];;
(如果您发布更多问题,请在几行而不是一行上发布代码,并带有缩进)。“…返回不正确”-此代码甚至无法编译,因为
separate
需要键入'a list->'a list*'a list
,但您正在尝试执行x::separate xs
。这就是你的意思吗?“…它没有正确返回”-此代码甚至没有编译,因为separate
需要键入'a list->'a list*'a list
,但你正在尝试执行x::separate xs
。这就是你的意思吗?