2016-10-17 6 views
0

各文字が文字列に現れる時間をカウントしようとしていますが、私はスイッチとforループを使用していますが、正しくインクリメントされていません。ここに私のコード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

このコードは現在の形式で問題はありませんが、私にとっては問題ありません。あなたはcountAcountCcountT、およびcountGのあなたの初期化を示しているが、私は初期化する場合は、次のようにしていない:

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

私は数字のこのシリーズを取得する次に、あなたのコードを実行します(スペースを節約するために行に4を崩壊しました):

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

私の謝罪、あなたは正しい、私は単にあなたに感謝しすぎて感謝していた –

関連する問題