我正在尝试编写一个将需要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"
Run Code Online (Sandbox Code Playgroud)
我不确定如何使这个工作,因为每次它到达x:xs的末尾,它将看到一个空字符串,然后它将满足相应的基本情况并终止.我不知道如何让它回到(x:xs)的开头并再次开始打印.
你要写的是这样的:
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
Run Code Online (Sandbox Code Playgroud)
但是会写得更好:
repString :: [Char] -> [Char] -> [Char]
repString p k = take (length k) (cycle p)
Run Code Online (Sandbox Code Playgroud)