递归重复一个字符串

Rum*_*tov 0 recursion haskell

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

Lyn*_*ynn 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
Run Code Online (Sandbox Code Playgroud)

但是会写得更好:

repString :: [Char] -> [Char] -> [Char]
repString p k = take (length k) (cycle p)
Run Code Online (Sandbox Code Playgroud)

  • 这应该更快`repString pk = zipWith const(cycle p)k`和pointfree`sesstring = zipWith const.cycle` (6认同)