可能重复:
replicate function help
decode [] = ""
decode = concatMap decodeHelper
where
decodeHelper (1 x) = [x]
decodeHelper ( n x) = replicate n x
我做了什么错了???
我有一个列表[(Char,Int)]
,我需要复制char,无论数字是什么,我需要把它放到一个字符串中[(Char,Int)] -> String
例如
decode ['a',9']
将返回"aaaaaaaaa"
答案 0 :(得分:3)
代码中存在一些语法问题。例如,使用逗号编写元组,因此decodeHelper
中的模式应该看起来像(n,x)
,而不是(n x)
。后者将被编译器解释为调用函数n
,传递x
作为参数,这肯定不是你的意思。
事实证明,您不需要n
等于1
的特殊情况。只需使用replicate 1 x
即可根据需要为您提供[x]
。事实证明,您的空列表的特殊情况是不必要的,因为应用于空列表的concatMap f
也将产生空列表。因此,删除这些不必要的案例并清理代码,
decode = concatMap decodeHelper
where decodeHelper (n, x) = replicate n x
另一个(稍高级)更改将是使用uncurry
而不是在where子句中明确地编写decodeHelper
,从而产生非常简单易读:
decode = concatMap (uncurry replicate)
答案 1 :(得分:0)
有什么问题:
decode a b = replicate a b
答案 2 :(得分:0)
您的decodeHelper
有错误的呼叫签名。如果您在任何地方放入预期的函数签名,您可能会从编译器获得更好的结果,以便类型检查器可以告诉您它出错的地方。
具体来说,您的表达式(1 x)
或(n x)
不能属于(char,int)
类型,因此它们与您提供的列表中的类型不匹配。您需要(1,x)
和(n,x)
才能使模式匹配正常工作。