F #에서 평균 수로 연도를 재귀 적으로 인쇄하려면 어떻게해야합니까?

CR9191

좋아, 그래서 나는 내 텍스트 파일에서 한 줄당 평균 숫자로 연도를 인쇄하는 방법을 알아 내려고 이틀 동안이 골칫거리에 접근했습니다. 며칠 전에 비슷한 질문을했는데 기본적으로 같은 질문을 했습니다. 줄당 총 요소의 평균 값과 함께 텍스트 파일에서 줄을 재귀 적으로 인쇄하려면 어떻게해야합니까?

계속됩니다. 그러나 몇 가지 기능을 만들었습니다. 자, 여기 내 새로운 질문이 있습니다. 내 프로그램의 출력이 아래 그림과 같은 이유는 무엇입니까? 내 코드에서 몇 가지 질문을 주석 처리했습니다. 나는 다음과 같은 출력을 기대하고 있었다.

2010: 3.5788888
2009: 4.697858
This list goes on recursively.

산출

업데이트 된 코드는 다음과 같습니다.

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)

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

let avg (values:double list) = //this function can compute the average, but it wont work when I do in main, print(firstYear, avg (firstYear1))
    let rec sum values accum =
        match values with
        |  [] -> accum
        |  head :: tail -> sum tail (accum + head/12.0)
    sum values 0.0

let rec sum (year, values:double list) = 
  if values = [] then
    0.0
  else
    values.Head + sum (year, values.Tail)

[<EntryPoint>]
let main argv =
  // read entire file as list of strings:
  let file = ReadFile "rainfall-midway.txt"

  printfn "** Rainfall Analysis Program **"
  printfn ""

  // let's parse first line into tuple (year, list of rainfall values),
  // and then print for debugging:
  let (year, values) = ParseLine file.Head
  let firstYear = file.Head
  let firstYear1 = file.Tail

  //let data = List.map ParseLine file //I know map would be the key, but how does this work with year and its elements?
  //let firstYear = data.Head

  //let firstYear = data.Head
  //print firstYear

  print (firstYear, firstYear1)
  //let S = sum firstYear
  //printfn "%A" S

  //let A = S / 12.0
  //printfn "%A" A

  // done:
  printfn ""
  printfn ""
  0 // return 0 => success
게리 에스

가지고있는 코드는 실제로 예상 한 데이터를 제공하는 데 매우 가깝습니다. 작업을 단순화하기 위해 몇 가지 변경할 수 있습니다.

먼저 질문에 답하십시오

내 프로그램의 출력이 아래 그림과 같은 이유는 무엇입니까?

이것은 연도와 파싱 된 모든 값을 인쇄하기 때문입니다 (파일을 인쇄하는 코드와 일치하지 않음). 이를 해결하는 쉬운 방법은 ParseLine함수가 평균을 계산하도록하는 것입니다. 함수 avg이전 으로 이동 ParseLine해야하지만 문제가되지 않습니다.

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) // calculate avg here

완료되면 맵을 사용하여 파일의 모든 행에서 ParseLine을 실행할 수 있습니다.

let result = file |> List.map ParseLine

그런 다음 결과를 인쇄하려면 결과 목록을 반복하기 만하면됩니다.

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

즉, sum 및 avg 함수를 모두 제거하고 ParseLine함수 에서 대신 fold를 사용할 수 있습니다.

let ParseLine (line:string) =
  let strings = line.Split('\t')
  let strlist = Array.toList(strings)
  let year = System.Int32.Parse(strlist.Head)
  year, (strlist.Tail |> List.fold(fun state el -> (System.Double.Parse el + state)) 0.0) / float strlist.Tail.Length

ParseLine기능 을 변경하지 않으려면 다음을 수행 할 수 있습니다.

  let result = file |> List.map(fun el -> 
    let (year, values) = ParseLine el
    (year, avg values))

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

F #의 목록에서 모든 요소를 재귀 적으로 추가하려면 어떻게해야합니까?

분류에서Dev

Python : 목록에 재귀 적으로 무언가를 추가하려면 어떻게해야합니까?

분류에서Dev

F #에서 재귀를 사용하여이 함수를 작성하려면 어떻게해야합니까?

분류에서Dev

관용적 인 방식으로 재귀를 사용하여 트리를 처리 할 때 F # 맵을 생성하려면 어떻게해야합니까?

분류에서Dev

사전을 통해 재귀하고 나중에 참조 할 수 있도록 값을 동적으로 업데이트하려면 어떻게해야합니까?

분류에서Dev

Solaris에서로드 평균 (및로드 평균 만)을 얻으려면 어떻게해야합니까?

분류에서Dev

명령 줄에서 재귀 적 찾기 및 바꾸기를 수행하려면 어떻게해야합니까?

분류에서Dev

Java의 Nim 프로그램에서 재귀를 제거하려면 어떻게해야합니까?

분류에서Dev

Javascript에서 중첩 배열을 재귀 적으로 다시 매핑하려면 어떻게해야합니까?

분류에서Dev

Windows에서 파일의 가독성을 재귀 적으로 나열하려면 어떻게해야합니까?

분류에서Dev

Windows에서 파일의 가독성을 재귀 적으로 나열하려면 어떻게해야합니까?

분류에서Dev

dir (ACL 사용)에서 권한을 재귀 적으로 설정하려면 어떻게해야합니까?

분류에서Dev

SMPlayer에서 현재 재생 위치를 영구적으로 표시하려면 어떻게해야합니까?

분류에서Dev

디렉토리 구조를 유지하면서 파일 확장자별로 파일을 재귀 적으로 복사하려면 어떻게해야합니까?

분류에서Dev

디렉토리의 모든 이미지에서 exif 정보를 재귀 적으로 제거하려면 어떻게해야합니까?

분류에서Dev

div가 화면에서 수평으로 확장되도록하려면 어떻게해야합니까?

분류에서Dev

클로저에서 여러 인수를 가져 와서 인쇄하려면 어떻게해야합니까?

분류에서Dev

numpy와 pandas에서 변수로 그룹화 된 평균을 얻으려면 어떻게해야합니까?

분류에서Dev

Vim : 중괄호 사이의 모든 항목에 대해 ": sort"를 재귀 적으로 실행하려면 어떻게해야합니까?

분류에서Dev

하위 디렉터리를 재귀 적으로 나열하려면 어떻게해야합니까?

분류에서Dev

JavaFX : ScrollPane 내부에서 ImageView를 수평으로 중앙에 배치하려면 어떻게해야합니까?

분류에서Dev

자신의 폴더에 파일을 재귀 적으로 압축하려면 어떻게해야합니까?

분류에서Dev

vuetify 2에서 카드를 수평으로 정렬하려면 어떻게해야합니까?

분류에서Dev

함수 포인터를 통해 클래스 멤버 함수를 재귀 적으로 호출하려면 어떻게해야합니까?

분류에서Dev

명령 줄을 사용하여 마지막 디렉터리에 재귀 적으로 디렉터리를 만들려면 어떻게해야합니까?

분류에서Dev

Bash의 모든 기존 디렉토리에 Textures 디렉토리를 재귀 적으로 생성 한 다음 삭제하려면 어떻게해야합니까?

분류에서Dev

Windows Vista에서 "숨겨진"파일 플래그를 재귀 적으로 지우려면 어떻게해야합니까?

분류에서Dev

문자열에있는 모든 단어의 첫 글자를 재귀 적으로 대문자로 만들려면 어떻게해야합니까?

분류에서Dev

CTE를 함수와 결합하고 재귀적인 방식으로 사용하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    F #의 목록에서 모든 요소를 재귀 적으로 추가하려면 어떻게해야합니까?

  2. 2

    Python : 목록에 재귀 적으로 무언가를 추가하려면 어떻게해야합니까?

  3. 3

    F #에서 재귀를 사용하여이 함수를 작성하려면 어떻게해야합니까?

  4. 4

    관용적 인 방식으로 재귀를 사용하여 트리를 처리 할 때 F # 맵을 생성하려면 어떻게해야합니까?

  5. 5

    사전을 통해 재귀하고 나중에 참조 할 수 있도록 값을 동적으로 업데이트하려면 어떻게해야합니까?

  6. 6

    Solaris에서로드 평균 (및로드 평균 만)을 얻으려면 어떻게해야합니까?

  7. 7

    명령 줄에서 재귀 적 찾기 및 바꾸기를 수행하려면 어떻게해야합니까?

  8. 8

    Java의 Nim 프로그램에서 재귀를 제거하려면 어떻게해야합니까?

  9. 9

    Javascript에서 중첩 배열을 재귀 적으로 다시 매핑하려면 어떻게해야합니까?

  10. 10

    Windows에서 파일의 가독성을 재귀 적으로 나열하려면 어떻게해야합니까?

  11. 11

    Windows에서 파일의 가독성을 재귀 적으로 나열하려면 어떻게해야합니까?

  12. 12

    dir (ACL 사용)에서 권한을 재귀 적으로 설정하려면 어떻게해야합니까?

  13. 13

    SMPlayer에서 현재 재생 위치를 영구적으로 표시하려면 어떻게해야합니까?

  14. 14

    디렉토리 구조를 유지하면서 파일 확장자별로 파일을 재귀 적으로 복사하려면 어떻게해야합니까?

  15. 15

    디렉토리의 모든 이미지에서 exif 정보를 재귀 적으로 제거하려면 어떻게해야합니까?

  16. 16

    div가 화면에서 수평으로 확장되도록하려면 어떻게해야합니까?

  17. 17

    클로저에서 여러 인수를 가져 와서 인쇄하려면 어떻게해야합니까?

  18. 18

    numpy와 pandas에서 변수로 그룹화 된 평균을 얻으려면 어떻게해야합니까?

  19. 19

    Vim : 중괄호 사이의 모든 항목에 대해 ": sort"를 재귀 적으로 실행하려면 어떻게해야합니까?

  20. 20

    하위 디렉터리를 재귀 적으로 나열하려면 어떻게해야합니까?

  21. 21

    JavaFX : ScrollPane 내부에서 ImageView를 수평으로 중앙에 배치하려면 어떻게해야합니까?

  22. 22

    자신의 폴더에 파일을 재귀 적으로 압축하려면 어떻게해야합니까?

  23. 23

    vuetify 2에서 카드를 수평으로 정렬하려면 어떻게해야합니까?

  24. 24

    함수 포인터를 통해 클래스 멤버 함수를 재귀 적으로 호출하려면 어떻게해야합니까?

  25. 25

    명령 줄을 사용하여 마지막 디렉터리에 재귀 적으로 디렉터리를 만들려면 어떻게해야합니까?

  26. 26

    Bash의 모든 기존 디렉토리에 Textures 디렉토리를 재귀 적으로 생성 한 다음 삭제하려면 어떻게해야합니까?

  27. 27

    Windows Vista에서 "숨겨진"파일 플래그를 재귀 적으로 지우려면 어떻게해야합니까?

  28. 28

    문자열에있는 모든 단어의 첫 글자를 재귀 적으로 대문자로 만들려면 어떻게해야합니까?

  29. 29

    CTE를 함수와 결합하고 재귀적인 방식으로 사용하려면 어떻게해야합니까?

뜨겁다태그

보관