Recursion 为什么double list(我的参数)与main中的Parse Line/Map函数不一致?F#
好的,我已经谈到了最后一件事情,根据Visual Studio,它主要导致错误,“这种类型应该有类型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
双列表
,但这里有双列表
类型。”我将向您展示有错误的代码。我有一个平均值函数来计算值,它被声明为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