我有这个功能,我想做的就是拿一个列表,将列表中的每个元素拆分为'。'并将分离的元素放在两个不同的列表中,我现在的问题是我得到一个错误,表示let表达式未完成,我认为它与没有返回值有关,有没有办法绕过这个或者我我做错了什么?
let klist = []
let olist = []
let listSplit list =
match list.Split '.' with
| [| x;y |] -> x :: klist, y :: olist
| [| x |] -> x :: klist
| _ -> None;;
答案 0 :(得分:3)
看起来你想要像
这样的东西let listSplit (list: string list) =
let acc (kl, ol) = function
| [| x; y |] -> (x::kl, y::ol)
| [| x |] -> (x::kl, ol)
list |> List.map (fun s -> s.Split('.'))
|> List.filter(fun a -> a.Length = 1 || a.Length = 2)
|> List.fold acc ([],[])
您现有的代码存在一些问题:
list
没有拆分方法。 String
确实有Split
方法,因此您可能希望在输入列表中拆分每个字符串,您可以使用List.map
。
您的match
表达式未进行类型检查,每个分支都有不同的类型 - 第一个返回string list * string list
,第二个string list
和第三个a' option
。