繁体   English   中英

在列表中将字符串乘以Haskell

[英]Multiplying String in a list, Haskell

我正在尝试将列表中的字符串相乘。 例如,当我有一个类似["hello","World"]的列表["hello","World"]并且想要将它“乘以2”时,我想以["hello","hello","World","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中的非穷举模式

我是这种语言的新手,我不知道如何进行整理。 你能帮我吗?

  • 您的第一个问题是非空列表的模式是错误的,应该是(x:xs) ,而不是[x:xs]
  • 此外, 复制期望单个元素并将其转换为长度为n的列表,因此应replicate nx ,而不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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM