Recursion 为什么double list(我的参数)与main中的Parse Line/Map函数不一致?F#

Recursion 为什么double list(我的参数)与main中的Parse Line/Map函数不一致?F#,recursion,f#,functional-programming,Recursion,F#,Functional Programming,好的,我已经谈到了最后一件事情,根据Visual Studio,它主要导致错误,“这种类型应该有类型双列表,但这里有双列表类型。”我将向您展示有错误的代码。我有一个平均值函数来计算值,它被声明为double list。主要原因是什么?如果我不清楚,我很抱歉,但我很难解释为什么又忘了一件事-我正试图用我的程序读取文本文件 let avg (values:double list) = let rec sum values accum = match values with

好的,我已经谈到了最后一件事情,根据Visual Studio,它主要导致错误,“这种类型应该有类型
双列表
,但这里有
双列表
类型。”我将向您展示有错误的代码。我有一个平均值函数来计算值,它被声明为double list。主要原因是什么?如果我不清楚,我很抱歉,但我很难解释为什么又忘了一件事-我正试图用我的程序读取文本文件

let avg (values:double list) =
    let rec sum values accum =
        match values with
        |  [] -> accum
        |  head :: tail -> sum tail (accum + head/12.0)
    sum values 0.0

let ReadFile filename =
  [ for line in System.IO.File.ReadLines(filename) -> line ]

let ParseLine (line:string) =
  let strings = line.Split('\t')
  let strlist = Array.toList(strings)
  let year = System.Int32.Parse(strlist.Head)
  let values = List.map System.Double.Parse strlist.Tail
  (year, avg values)
大体上

let result = file |> List.map(fun el -> 
    let (year, values) = ParseLine el 
    (year, avg values)) //values gets the error as described above.

  result |> List.iter(fun (year, avgRainfall) -> printfn "%i: %f" year avgRainfall) 
  let result = file |> List.map(fun el -> 
    let (year, values) = ParseLine el 
    (year, avg values)) // it works!!!

  result |> List.iter(fun (year, avgRainfall) -> printfn "%A: %A" year avgRainfall) 

我认为这在前面的问题中得到了回答,但这是因为
let result=。。。(年份,平均值)
ParseLine
已经在计算平均值,因此它不再是一个列表,而只是一个值。

好的,在@Gary.S的帮助下,我发现了这个问题

let avg (values:double list) =
    let rec sum values accum =
        match values with
        |  [] -> accum
        |  head :: tail -> sum tail (accum + head/12.0)
    sum values 0.0

let ReadFile filename =
  [ for line in System.IO.File.ReadLines(filename) -> line ]

let ParseLine (line:string) =
  let strings = line.Split('\t')
  let strlist = Array.toList(strings)
  let year = System.Int32.Parse(strlist.Head)
  let values = List.map System.Double.Parse strlist.Tail
  (year, values) // Removed Avg.
大体上

let result = file |> List.map(fun el -> 
    let (year, values) = ParseLine el 
    (year, avg values)) //values gets the error as described above.

  result |> List.iter(fun (year, avgRainfall) -> printfn "%i: %f" year avgRainfall) 
  let result = file |> List.map(fun el -> 
    let (year, values) = ParseLine el 
    (year, avg values)) // it works!!!

  result |> List.iter(fun (year, avgRainfall) -> printfn "%A: %A" year avgRainfall) 

该错误消息几乎肯定是不正确的-不存在类似于
double float