help whats wrong with my code [duplicate]
Possible Duplicate:
replicate function help
decode [] = ""
decode = concatMap decodeHelper
开发者_如何学Gowhere
decodeHelper (1 x) = [x]
decodeHelper ( n x) = replicate n x
What is wrong with what I have done???
I have got a list [(Char,Int)] and I need to replicate the char by whatever the number is and I need to put it into a string so [(Char,Int)] -> String
for example
decode ['a',9'] will return "aaaaaaaaa"
You have a few syntax issues in the code. For one, tuples are written with a comma, so the patterns in decodeHelper should look like (n,x), not (n x). The latter will be interpreted by the compiler as calling a function n, passing x as the argument, which is certainly not what you meant.
It turns out that you don't need a special case for n equal to 1. Just using replicate 1 x will give you [x], just as you want. It also turns out that your special case for the empty list is unnecessary, since concatMap f applied to an empty list will yield the empty list, too. So removing these unnecessary cases and cleaning up your code, you get
decode = concatMap decodeHelper
where decodeHelper (n, x) = replicate n x
One more (slightly more advanced) change would be to use uncurry rather than writing decodeHelper explicitly in a where clause, yielding the very simple and easy to read:
decode = concatMap (uncurry replicate)
What's is wrong with:
decode a b = replicate a b
?
Your decodeHelper has the wrong call signature. You may get better results from the compiler if you put in expected function signatures everywhere, so that the type checker can tell you where it went wrong.
Specifically, your expression (1 x) or (n x) fail to be of the type (char,int), so they don't match the type inside the list you're feeding it. You need for these to be (1,x) and (n,x) to actually make the pattern match work.
加载中,请稍侯......
精彩评论