我是編程新手,F#是我的第一個.NET語言。微妙的類型錯誤
我在Rosalind.info上嘗試this problem。基本上,給定一個DNA字符串,我應該返回四個整數,計算符號'A','C','G'和'T'出現在字符串中的次數。
這裏是到目前爲止我所編寫的代碼:
open System.IO
open System
type DNANucleobases = {A: int; C: int; G: int; T: int}
let initialLetterCount = {A = 0; C = 0; G = 0; T = 0}
let countEachNucleobase (accumulator: DNANucleobases)(dnaString: string) =
let dnaCharArray = dnaString.ToCharArray()
dnaCharArray
|> Array.map (fun eachLetter -> match eachLetter with
| 'A' -> {accumulator with A = accumulator.A + 1}
| 'C' -> {accumulator with C = accumulator.C + 1}
| 'G' -> {accumulator with G = accumulator.G + 1}
| 'T' -> {accumulator with T = accumulator.T + 1}
| _ -> accumulator)
let readDataset (filePath: string) =
let datasetArray = File.ReadAllLines filePath
String.Join("", datasetArray)
let dataset = readDataset @"C:\Users\Unnamed\Desktop\Documents\Throwaway Documents\rosalind_dna.txt"
Seq.fold countEachNucleobase initialLetterCount dataset
但是,我已收到以下錯誤消息:
CountingDNANucleotides.fsx(23,10):錯誤FS0001:類型匹配。 期待 DNANucleobases - >字符串 - > DNANucleobases但鑑於一個 DNANucleobases - >字符串 - > DNANucleobases []類型 'DNANucleobases' 不匹配類型 'DNANucleobases []'
出了什麼問題?我應該做什麼改變來糾正我的錯誤?
我認爲你的'Array.map'應該是'array.iter',你需要返回累加器 – 2015-03-19 11:37:57
你必須''摺疊'dnaCharArray'數組,因爲'countEachNucleobase'需要'DNANucleobases'的累加值,不是一個數組。 – 2015-03-19 12:03:19