haskell - Haskell:从字符串中提取整数
问题描述
你好我有这个String
"(33,18,109)"
如何从该字符串中提取整数以对其应用函数?
谢谢你。
解决方案
最直接的方法是使用read "(33,18,109)" :: (Int,Int,Int)
,但这不是一个好方法,因为它不处理失败(例如读取"(21,3,not valid)"
并(21,43)
会导致错误。
更好的方法是使用readMaybe "(1,2,3) :: Maybe (Int,Int,Int)"
. 结果使用 aMaybe
表示可能的失败:
import Text.Read
ans :: String -> Maybe (Int,Int,Int)
ans = readMaybe
ans "(12,53,29)" == Just (12,53,29)
ans "not a valid string" == Nothing
但是,您可能想先看看您是如何得到一个字符串的。是因为执行 IO 操作(例如从文件中读取)吗?如果不是,通常您不必直接处理某事物的字符串表示然后对其进行操作(因为这违反了抽象层)。
此外,还有一个名为 Parser Combinator 的主题,用于处理 Haskell 中的解析。但是,如果您的任务是只解析 3 个数字而不是解析算术表达式(例如 )等更复杂的事情,那么这将是非常无关紧要的1+2*3
。
推荐阅读
- sql - 在其他 null if 语句中嵌入 null if
- python - 无法在 python 中读取 .npz 文件
- react-native - `react-native-dropdown-picker` 不为 multiSelect 选择默认值,如果列表项已选择:true {label:"A", value:1, selected:true}
- r - 在R中将空间点转换为栅格
- c# - 将 WPF 画布导出为 PDF
- javascript - 错误:“/my dir/node_modules/babel-preset-php/src/index.js”中指定的插件 0 提供了“默认”的无效属性
- python - 我在尝试安装 Cython 时遇到了障碍
- php - 抓取 Web 应用程序时使用 Xdebug 测量代码覆盖率
- vue.js - Vue路由器链接传递道具未定义
- python - Sublime Text 更新后我的所有模块都不起作用