递归重复一个字符串

时间:2015-05-17 19:25:46

标签: haskell recursion

我正在尝试编写一个需要2个字符串p和k的函数。它将检查p和k的长度并连续重复p中的字母,直到结果字的长度为k。例如:令p = 123且k = 45678.然后结果字= 12312,因为k的长度为5.因此,连续重复p的字符直到结束字达到k的长度。我的代码不能按照我的要求运行:

repString::[Char]->[Char]->[Char]
repString [] (y:ys)         =[]
repString (x:xs) []         =[]
repString (x:xs) (y:ys)
 |length(x:xs)<length(y:ys) =(x:xs)++x:repString (xs) []

main = do
print $ repString "123" "45678"

我不确定如何使这个工作,因为每次它到达x:xs的末尾,它将看到一个空字符串,然后它将满足相应的基本情况并终止。我不知道如何让它回到(x:xs)的开头并再次开始打印。

1 个答案:

答案 0 :(得分:5)

你想写的东西是这样的:

repString :: [Char] -> [Char] -> [Char]
repString [] k = []
repString p [] = []
repString p k
   | length p <= n = p ++ repString p (drop (length p) k)
   | otherwise     = take n p
   where n = length k

但最好写成:

repString :: [Char] -> [Char] -> [Char]
repString p k = take (length k) (cycle p)