在Haskell中读取字符串

在Haskell中读取字符串,haskell,Haskell,我试图在Haskell中编写一个从字符串读取的函数,如果字符串有一个数字,它应该返回True。 这就是我现在拥有的 hasNumber :: String -> Bool hasNumber n = any number 我在第二行尝试了很多功能,但似乎不起作用,有人能帮我吗? 谢谢大家! 应该通过“数字”来细化您想要的内容,但是假设您只想以Haskell打印的方式读取格式化为字符串的一种Haksell数字类型,那么您可以使用readMaybe函数 import Text.Read h

我试图在Haskell中编写一个从字符串读取的函数,如果字符串有一个数字,它应该返回True。 这就是我现在拥有的

hasNumber :: String -> Bool
hasNumber n = any number
我在第二行尝试了很多功能,但似乎不起作用,有人能帮我吗?
谢谢大家!

应该通过“数字”来细化您想要的内容,但是假设您只想以Haskell打印的方式读取格式化为字符串的一种Haksell数字类型,那么您可以使用
readMaybe
函数

import Text.Read

hasNumber :: String -> Bool
hasNumber x = isJust ( readMaybe x :: Maybe Int )
如果您想读取不同的数字类型,而不是将类型注释更改为
可能是Double
可能是Integer
或任何您想要的


如果您需要解析与Haskell
默认显示不同的各种数字格式,那么请使用Parsec之类的解析器库。

应该通过“数字”细化您想要的内容,但假设您只想以Haskell打印的方式读取格式化为字符串的Haksell数字类型之一,然后可以使用
readMaybe
功能

import Text.Read

hasNumber :: String -> Bool
hasNumber x = isJust ( readMaybe x :: Maybe Int )
如果您想读取不同的数字类型,而不是将类型注释更改为
可能是Double
可能是Integer
或任何您想要的


如果需要解析不同于Haskell默认显示方式的各种数字格式,那么使用Parsec之类的解析器库。

假设您想检查字符串是否为自然数

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 '-'

假设你想检查你的字符串是否是一个自然数

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 '-'

很明显,你需要为数字插入一个“实”函数(我想你这里指的是“数字”)。你试过做什么?你想在哪里使用
Text.parsercompbinators.Parsec.number
中的
number::Integral i=>Int->GenParser-tok-st-Char->GenParser-tok-st-i
,或者你的问题中的
number
是什么?显然,你需要为number插入一个“real”函数(我想你这里指的是“digit”)。你试过什么?你想在哪里使用
Text.parsercompbinators.Parsec.number
中的
number::Integral i=>Int->GenParser tok st Char->GenParser tok st i
,或者你的问题中的
number
是什么?
hasNumber“-37”==False
。也许你指的是自然数,不是整数?@kqr:是的。为完成添加了
isIntegral
hasNumber“-37”==False
。也许你指的是自然数,不是整数?@kqr:是的。为完成添加了
isIntegral