如何用Haskell的readMaybe验证字符串是否可转为整数?
验证字符串是否可转换为整数的Haskell优化方案
嘿,我看了你写的验证整数的Haskell代码,逻辑方向是对的,但有个可以优化的点——你两次调用了readMaybe,这会做重复的解析工作,有点没必要。咱们来调整一下,让代码更简洁高效:
基础优化版本
首先,你导入的Data.Char和Data.List其实在这个函数里没用到,完全可以删掉,减少不必要的依赖。然后用isJust函数来简化判断:
import Text.Read checkValidInt :: String -> Bool checkValidInt strInt = isJust (readMaybe strInt :: Maybe Int)
如果觉得用case模式匹配更直观,也可以写成这样:
import Text.Read checkValidInt :: String -> Bool checkValidInt strInt = case readMaybe strInt :: Maybe Int of Just _ -> True Nothing -> False
处理边界情况的进阶版本
如果需要应对一些常见的边缘输入(比如带前后空格的字符串、单独的"+"/"-"符号),可以加一点预处理逻辑:
import Text.Read import Data.Char (isSpace) checkValidInt :: String -> Bool checkValidInt str = let trimmed = dropWhile isSpace str -- 去掉前导空格 stripped = case trimmed of ('+' : rest) -> rest ('-' : rest) -> rest _ -> trimmed in not (null stripped) && isJust (readMaybe stripped :: Maybe Int)
这个版本会先清理掉字符串前后的空格,处理正负号,同时排除掉单独的"+"或"-"这种无效输入。
内容的提问来源于stack exchange,提问作者woofdinos
相关产品推荐
相关产品推荐

