我正在尝试编写一个从Haskell中的String读取的函数,如果String有一个数字,它应该返回True。 这就是我目前所拥有的
hasNumber :: String -> Bool
hasNumber n = any number
我在第二行尝试了很多功能,但它似乎不起作用,任何人都可以帮助我吗? 谢谢!
答案 0 :(得分:2)
应该用“数字”来改进你想要的东西,但是假设你想简单地读取一个按照Haskell打印方式格式化为字符串的Haksell数字类型,那么你可以使用readMaybe
函数。 / p>
import Text.Read
hasNumber :: String -> Bool
hasNumber x = isJust ( readMaybe x :: Maybe Int )
如果您想要阅读不同的数字类型,请将类型注释更改为Maybe Double
,Maybe Integer
或任何您想要的内容。
如果您需要解析与默认情况下Haskell show
的方式不同的各种数字格式,请使用像Parsec这样的解析器库。
答案 1 :(得分:2)
假设你想检查你的字符串是否是一个自然数字,它归结为
import Data.Char (isDigit)
hasNumber :: String -> Bool
hasNumber = all isDigit
如果您不想使用Data.Char
(如果这是作业,则不允许),您可以使用
isDigit = (`elem` ['0'..'9'])
如果要检查数字是否为整数,则必须检查字符串是否以“ - ”开头,如果是,则检查字符串的其余部分是否为自然数:
isIntegral :: String -> Bool
isIntegral ('-':[]) = False -- string is "-", which isn't a number
isIntegral ('-':xs) = hasNumber xs -- string is "-....", so we check "...."
isIntegral x = hasNumber x -- string doesn't start with '-'