string - 如何计算字符串列表中的整数。 haskell

标签 string list haskell

有一个字符串列表["f", "1", "h", "6", "b", "7"]。

我如何计算这个列表中的 Int?

现在我有了这个算法,但它不是很好。

import Data.Char
let listOfStrings = ["f", "1", "h", "6", "b", "7"]
let convertedString = "f1h6b7"
let listOfInt = map (\x -> read [x]::Int) (filter (\x -> isDigit x) convertedString)
length listOfInt
Prelude> 3

此外,我无法将 listOfStrings 转换为一个字符串。这个算法甚至不能正常工作

你能帮我优化一下吗?

最佳答案

1) 使用reads::Reads Int(这个表达式只是reads::String -> [(Int, String)] 的伪装)来测试一个字符串是整数值的表示:

isNumber :: String -> Bool
isNumber s = case (reads s) :: [(Int, String)] of
    [(_, "")] -> True
    _         -> False

为什么 reads ?因为它返回有关解析过程的附加信息,我们可以从中得出解析是否成功的结论。 read::Int 只会抛出异常。

2) 然后用它过滤一个字符串列表并获取它的长度:

intsCount :: [String] -> Int 
intsCount = length . filter isNumber

关于string - 如何计算字符串列表中的整数。 haskell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673169/

相关文章:

string - 从 f# 中的字符串中删除字符

java - Java 中的字符串打乱顺序

string - 你如何追加到一个已经存在的字符串?

python - 列表中语法正确的人类可读字符串(带牛津逗号)

haskell - 函数类似于 "when"但返回一个值?

php - 如何仅在 PHP 中使用 str_replace() 删除一定次数的文本?

java - 对象列表。整数项运算

java - 如果列表中的最后一个元素比其他元素大,如何删除它?

haskell - IO 是免费的 Monad 吗?

haskell - 对 lambda 的这种用法感到困惑