如何从文本文件中递归打印行以及每行的总元素的平均值?

时间:2015-02-13 02:33:49

标签: list recursion f# average elements

我知道这个问题听起来有点挑战,但是我发现这里没有任何与F sharp有关的内容。好的,因为在我之前的问题中我提到过我对F#的新手。感谢几位程序员和#39;帮助我解决我在上一个问题中的求和函数。所以,我有一个包含超过20行的文本文件,我想打印出年份和每年平均总元素及其元素的行。

示例文字行

2009    1.3     3.51    6.76    5.80    4.48    5.47    2.06    4.3 0.54    7.69    1.27    2.9
2008    3.53    3.71    1.88    2.46    4.63    4.88    4.53    1.51    10.83   2.7 1.28    6.51
2007    2.88    2.19    3.55    3.95    2   3.1 4.18    8.76    1.91    2.01    1.67    3.54
2006    3.48    1.33    3.16    3.87    3.19    3.87    4.24    7.12    4.32    6.63    2.97    3.37
2005    5.32    2.41    1.76    1.63    1.78    1.07    2.07    1.44    2.68    1.14    2.15    1.38
2004    1.09    0.75    3.93    1.9 5.57    2.94    4.46    5.01    0.86    2.42    5.02    1.75

...

现在,我有几个功能向您展示。不幸的是,我的打印功能只打印出第一行。

let rec print year values =
  if values = [] then
    ()
  else
    printfn ""
    printfn "%A: %A" year values

和完美地完成元素总和的第二个函数,但是我无法将其正确地划分为12个元素。

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

中的

  let (year, values) = ParseLine file.Head
  printfn "%A: %A" print (year (sum values)) // year gets the error, according to visual studio

1 个答案:

答案 0 :(得分:0)

感谢John Palmer发布的快速解决方案。固定代码是

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