如何将一个列表拆分为两个列表

问题描述 投票:0回答:1

我必须创建一个将数字列表拆分为两个列表的函数:

[Int(17);Float(18.9);Int(777);Float(15.5)]
->
[Int(17);Int(777)] , [Float(18.9);Float(15.5)]

type number =
  | Int of int
  | Float of float
;;

let rec split_number_list: number list -> number list * number list = function lis ->
  match lis with
  |[] -> li,fi
  |(Int n)::l -> ((Int n)::li,fi)
  |(Float n)::l -> (li,(Float n)::fi)

我有两个问题。首先,

li
出现“未绑定值”,然后我尝试创建两个名为
li
fi
的空列表,但这没有用。其次我不知道如何在函数中调用
split_number_list

list function ocaml
1个回答
0
投票

当你写

|[] -> li,fi
|(Int n)::l -> ((Int n)::li,fi)
时,编译器会感到惊讶,因为你告诉它“return li,fi”,即使你从未告诉它这个“li,fi”是什么。此时没有名为“li,fi”的变量,因此编写函数应返回该变量是没有意义的。

所以你需要以某种方式定义

li,fi
。您可以使用
let ... in ...
构造来做到这一点:

type number =
  | Int of int
  | Float of float
;;

let rec split_number_list: number list -> number list * number list =
  function
  |[] -> ...
  |(Int n)::l -> let li,fi = ... in ...
  |(Float n)::l -> let li,fi = ... in ...
© www.soinside.com 2019 - 2024. All rights reserved.