在Haskell中读取字符串

时间:2014-03-07 20:52:26

标签: haskell

我正在尝试编写一个从Haskell中的String读取的函数,如果String有一个数字,它应该返回True。 这就是我目前所拥有的

hasNumber :: String -> Bool
hasNumber n = any number

我在第二行尝试了很多功能,但它似乎不起作用,任何人都可以帮助我吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

应该用“数字”来改进你想要的东西,但是假设你想简单地读取一个按照Haskell打印方式格式化为字符串的Haksell数字类型,那么你可以使用readMaybe函数。 / p>

import Text.Read

hasNumber :: String -> Bool
hasNumber x = isJust ( readMaybe x :: Maybe Int )

如果您想要阅读不同的数字类型,请将类型注释更改为Maybe DoubleMaybe 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 '-'