Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 用OCaml分隔一个列表_List_Ocaml - Fatal编程技术网

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
。这就是你的意思吗?