旁路功能返回值要求F#

时间:2014-01-12 15:14:51

标签: f#

我有这个功能,我想做的就是拿一个列表,将列表中的每个元素拆分为'。'并将分离的元素放在两个不同的列表中,我现在的问题是我得到一个错误,表示let表达式未完成,我认为它与没有返回值有关,有没有办法绕过这个或者我我做错了什么?

  let klist = []
  let olist = []
  let listSplit list = 
    match list.Split '.' with
    | [| x;y |] -> x :: klist, y :: olist
    | [| x |] -> x :: klist
    | _ -> None;;

1 个答案:

答案 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