【发布时间】:2012-07-23 13:57:53
【问题描述】:
假设我想考虑表单的输入
[int_1, int_2, ..., int_n]
[int_1, int_2, ..., int_m]
...
从文本文件中读取输入。我的目标是获得此列表的最大大小。目前我有一个识别这种模式的正则表达式:
let input = "[1,2,3] [1,2,3,4,5]"
let p = input =~ "(\\[([0-9],)*[0-9]\\])" :: [[String]]
输出:
[["[1,2,3]","[1,2,3]","2,"],["[1,2,3,4,5]","[1,2,3,4,5]","4,"]]
所以我追求的是第三个索引 + 1 的最大值。但是,我被困的地方是试图将此索引视为一个 int。例如,我可以很好地引用元素:
(p !! 0) !! 2
> "2,"
但是我不能把它转换成int,我试过了
read( (p !! 0) !! 2)
但是,尽管
:t (p !! 0) !! 2
> (p !! 0) !! 2 :: String
似乎是一个字符串。任何关于为什么我不能将其作为 int 阅读的建议将不胜感激。
再次感谢。
【问题讨论】:
-
如果您需要列表的长度,则无需转换为整数值。使用
length $ (read "[1, 2, 3, 4 ,5]" :: [Int])有效。