【发布时间】:2015-03-19 11:24:06
【问题描述】:
我是编程新手,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并且你需要返回累加器 -
你必须
folddnaCharArray数组,因为countEachNucleobase期望的累积值是DNANucleobases,而不是数组。