我需要在Char List中转换这个字符串

时间:2012-11-03 17:33:22

标签: haskell

我正在学习哈斯克尔。我正在从文本文件中读取一个字符串,需要使该字符串成为char列表。

输入文件是:

Individuo A; TACGATCAAAGCT 
Individuo B; AATCGCAT 
Individuo C; TAAATCCGATCAAAGAGAGGACTTA 

我需要转换此字符串

S1 = "AAACCGGTTAAACCCGGGG"  in  S1 = 
["A","A","A","C","C","G","G","T","T","A","A","A","C","C","C","G","G","G","G"] 
or S1 = 
['A','A','A','C','C','G','G','T','T','A','A','A','C','C','C','G','G','G','G'] 

但它们被“;”分开

我该怎么办?

我该怎么办?

获得两个列表后,我将它们发送到此代码:

lcsList :: Eq a => [a] -> [a] -> [a]
lcsList [] _ = []
lcsList _ [] = []
lcsList (x:xs) (y:ys) = if x == y
                          then x : lcsList xs ys
                          else
                            let lcs1 = lcsList (x:xs) ys
                                lcs2 = lcsList xs (y:ys)
                            in if (length lcs1) > (length lcs2)
                                  then lcs1
                                  else lcs2

2 个答案:

答案 0 :(得分:4)

分离出每个字符串的粗略和准备的方法是这样的 - 你可以在ghci中尝试

let a = "Individuo A; TACGATCAAAGCT"
tail $ dropWhile (/= ' ') $ dropWhile (/= ';') a

给你:

"TACGATCAAAGCT"

因为String只是Char的列表,所以它与:

相同
['T', 'A', 'C', 'G', ...

答案 1 :(得分:3)

如果你的文件由几行组成,那很简单:你只需要跳过所有内容,直到找到“;”。如果您的文件只包含一行,则必须单独查找序列的开头和结尾(提示:序列以空格结尾)。编写递归函数来执行任务,并使用函数takeWhiledropWhile

String已经是Char的列表(它甚至定义如下:type String = [Char]),因此您无需执行任何其他操作。如果你需要一个String的列表,其中每个String只包含一个字符,那么使用map来包装每个字符(再次,每个String都是一个列表,所以你可以在这些上使用map。要包装char,有三种选择:

  1. 使用lambda函数:map (\c -> [c]) s
  2. 使用运营商部分:map (:[]) s
  3. 定义新功能:wrap x = [x]
  4. 祝你好运!