2016-10-17 5 views
0

각 char이 문자열에 나타나는 시간을 계산하려고하는데 스위치와 for 루프를 사용하고 있지만 제대로 증가하지 않습니다. 여기에 내 코드스위치를 사용하여 char의 빈도를 계산하는 OCAML

let countChar x = 
    match x with 
    'A'-> countA := !countA +1; 
    |'C'-> countC := !countC +1; 
    |'T'-> countT := !countT +1; 
    |'G'-> countG := !countG +1;  
;; 
let demoStri = "ACGTACGT" in 
for j = 0 to 7 do 
countChar demoStri.[j]; 
let tempA = !countA in 
    print_int tempA; 
    print_string "\n"; 
let tempC = !countC in 
    print_int tempC; 
    print_string "\n"; 
let tempG = !countG in 
    print_int tempG; 
    print_string "\n"; 
let tempT = !countT in 
    print_int tempT; 
    print_string "\n"; 
done 

그러나 어떤 이유로 만 1 증가 것이며, 1 0 0 0 2 0 0 0 3 0 0 0을 반환 등등 ..... 뭔가 궁금했다 그 과정에서 잘못 됐어?

+0

왜 'j'를 사용하지 않습니까? – hugomg

+0

왜 List.iter ??? – karakfa

+0

그건 오타였다, 나는 내 코드에서 j가 아닌 다른 것을 사용하고 있었지만이 코드로 바꿨다. –

답변

0

이 코드는 현재 형태로 문제가없는 것으로 간주됩니다. 당신은 countA, countC, countTcountG 당신의 초기화를 보여,하지만 난 초기화하는 경우 다음과 같이하지 않습니다

let countA = ref 0 
let countC = ref 0 
let countT = ref 0 
let countG = ref 0 

나는 숫자의이 시리즈를 얻을 그런 다음 코드를 실행 (공간을 절약하기 위해 라인에 네 붕괴) :

1 0 0 0 
1 1 0 0 
1 1 1 0 
1 1 1 1 
2 1 1 1 
2 2 1 1 
2 2 2 1 
2 2 2 2 
0

여기서 가장 큰 문제는 tempH 변수를 사용하여 j 대신 문자열을 인덱싱하는 것입니다.

let() = 
    let demoStri = "ACGTACGT" in 
    let countA = ref 0 in 
    let countC = ref 0 in 
    let countT = ref 0 in 
    let countG = ref 0 in 
    for j = 0 to String.length demoStri - 1 do 
     match demoStri.[j] with 
     | 'A'-> countA := !countA +1 
     | 'C'-> countC := !countC +1 
     | 'T'-> countT := !countT +1 
     | 'G'-> countG := !countG +1 
     | _ -> assert false 
    done; 
    print_int !countA; print_string "\n"; 
    print_int !countC; print_string "\n"; 
    print_int !countT; print_string "\n"; 
    print_int !countG; print_string "\n" 
+0

문제는 for 루프와 관련이 없으며 기능과 관련이 있습니다. 내 소스 코드에서 완벽하게 루핑을. 그냥 제대로 증가하지 않습니다. –

+0

몇 가지 테스트를했는데 실제로 코드에 문제가 있습니다. 'A'-> countA : =! countA + 1을 'C'-> countC : =! countC로 변경하면 첫 번째 사례 만 증가합니다. +1하면 countA 대신 countC가 증가합니다. –

+0

제 사과, 네 말이 맞아, 나는 너를 고맙게 생각했다. –