我正在尝试编写一个需要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)的开头并再次开始打印。
答案 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)