如果您能告诉我如何从两个整数之间的范围内制作单个字符串,我将非常感激。就像[5..10]我需要得到一个" 5678910"。然后我必须计算一个字符串中有多少(零,一个......九)。
例如:如果我的范围是[1..10]我需要打印
1 2 1 1 1 1 1 1 1 1
现在我只有一个函数来搜索字符串中的元素。
`countOfElem elem list = length $ filter (\x -> x == elem) list`
但是如何构建这样一个字符串的部分让我烦恼,或者可能有更简单的方法?谢谢。
我试过这样的事情,但它不会起作用。
let intList = map (read::Int->String) [15..22]
答案 0 :(得分:3)
我试过这样的事,但是不行。
let intList = map (read::Int->String) [15..22]
嗯...... read
的目的是将字符串解析为可读值。因此它有一个类型签名String -> a
,显然不会与Int -> String
统一。你想要的是read
的逆 1 ,它被称为show
。
确实map show [15..22]
几乎给出了你要求的结果 - 数字为十进制编码的字符串 - 但仍然将每个数字作为单独的列表元素,即类型[String]
,而只需要String
}。好吧,asking Hoogle怎么样?它提供了您需要的功能,作为第五个命中:concat
。
如果您想获得幻想,可以将map
和concat
阶段结合起来:concatMap
函数和>>=
运算符都可以。实现结果的最紧凑方式:[15..22]>>=show
。
1 show
确切地说只是read
的右反。