我尝试过:
['1','2',..]
,但这也考虑了其他字符。 我可以做[1,2 ..],但是对于我的应用程序,我需要检查以下内容:
filter (\x -> x `notElem` ['0','1'..]) "a 1 255 d e 6 g h"
试图过滤掉所有元素,包括不是自然数的空格,在这种情况下为'chars'。
答案 0 :(得分:4)
在评论中有一些方法:
后继自然数为chars
。不仅可以编码从0
到9
的char数字,
naturalN :: [Char]
naturalN = ['0'..'9']
示例:
['0'..'9']
=> "0123456789"
就所有个自然数而言,它们不能被编码为char,而是字符串。例如:
naturalN :: [String]
naturalN = map show [0..]
示例:
take 20 naturalN
=> ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"]
此方法的问题在于,您无法检查elem
或notElem
,因为如果由于条件是无限列表而无法满足条件,它将永远无法完成计算。您将必须实际使用搜索内容的限制。
然后问题是如何尝试过滤字符串,如果使用第一种列表方法,这是可以的:
filter (\x -> x `elem` ['0'..'9']) "a 1 255 d e 6 g h"
=> "12556"
或者:
filter isDigit "a 1 255 d e 6 g h"
=> "12556"
如果您想要对面,那就去掉字符串的数字:
filter (not.isDigit) "a 1 255 d e 6 g h"
=> "a d e g h"