如何在Haskell中将自然数范围定义为char?

时间:2019-03-13 23:32:08

标签: haskell filter

我尝试过:

['1','2',..]

,但这也考虑了其他字符。 我可以做[1,2 ..],但是对于我的应用程序,我需要检查以下内容:

  filter (\x -> x `notElem` ['0','1'..]) "a 1 255 d e 6 g h" 

试图过滤掉所有元素,包括不是自然数的空格,在这种情况下为'chars'。

1 个答案:

答案 0 :(得分:4)

在评论中有一些方法:

后继自然数为chars。不仅可以编码从09的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"]

此方法的问题在于,您无法检查elemnotElem,因为如果由于条件是无限列表而无法满足条件,它将永远无法完成计算。您将必须实际使用搜索内容的限制。

然后问题是如何尝试过滤字符串,如果使用第一种列表方法,这是可以的:

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"