reads "7a7" :: [(Int, String)] [(7,"a7")] Prelude> reads "7e7" :: [(Int, String)] [] 我-6ren">
gpt4 book ai didi

string - 为什么 Haskell 无法读取 "7e7"但能够读取 "7a7"?

转载 作者:行者123 更新时间:2023-12-03 06:08:11 26 4
gpt4 key购买 nike

尝试做:

Prelude> reads "7a7" :: [(Int, String)]
[(7,"a7")]

Prelude> reads "7e7" :: [(Int, String)]
[]

我测试了中间所有可能的字符。除了 'e' 之外,它们都可以工作。看起来好像Haskell尝试用科学记数法解释该数字,但它不能,因为我要求的是 Int

对我来说这似乎是一个错误。

最佳答案

GHC 确实有问题。其执行Numeric.readSigned使用以下内容:

read'' r = do
(str,s) <- lex r
(n,"") <- readPos str
return (n,s)

lex 调用将尝试解析任何词位,这意味着对于“7e7”,它会产生 [("7e7", "")],因为 "7e7"是浮点文字的整个词位。然后,它尝试从 readPos 中获取完整的解析,在本例中,它是传入 Numeric.readDec 的参数,以及 readDec > 将正确生成字符串“7e7”的 [(7, "e7")]。与 (n, "") 的模式匹配失败,最终为 []

认为应该简单如下:

read'' = readPos

关于string - 为什么 Haskell 无法读取 "7e7"但能够读取 "7a7"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com