我正在尝试将列表中的字符串相乘。例如,当我有一个像["hello","World"]
这样的列表并且我希望将它“乘以”时,我希望最终得到["hello","hello","World","World"]
。
以下是我提出的建议:
rep :: Int -> [String] -> [String]
rep n [] = []
rep n [x:xs] = replicate n [x] ++ rep n [xs]
但它给了我例外:
(298,1) - (299,44):函数rep中的非详尽模式
我对这种语言完全陌生,我对如何解决这个问题没有任何想法。你能帮忙吗?
答案 0 :(得分:1)
(x:xs)
,而不是[x:xs]
。n
的列表,因此它应为replicate n x
,而不是replicate n [x]
。 xs
已经是一个清单。如果你解决了所有这些问题,你最终会得到以下内容,这实际上是按照预期的方式运作的:
rep :: Int -> [String] -> [String]
rep n [] = []
rep n (x:xs) = replicate n x ++ rep n xs
也就是说,有很多不同的方法可以写出来,例如concatMap:
rep n = concatMap (replicate n)
或
rep = concatMap . replicate