【问题标题】:How to read a string for a number starting with a decimal point in Haskell?如何在 Haskell 中读取以小数点开头的数字的字符串?
【发布时间】:2014-12-22 18:20:07
【问题描述】:

我是一个完全的 Haskell 初学者,刚刚发现read 在给定一个以 . 而不是数字开头的十进制数字时会吐出一个异常。例如,在 ghci 中:

Prelude> read ".7" :: Float
*** Exception: Prelude.read: no parse

我找到了one discussion,这是有道理的,为什么在 Haskell 中需要用数字包围 .Another discussion 也有点帮助,但没有人提供如何将".7" 实际转换为0.7 的解决方案。

所以,我正在尝试从一个固定宽度的格式文件中提取数据,该文件包含具有 .7 等值的字段---是否有标准函数或方法可以用来将其清理为浮点数 0.7 ?

(在我遇到这个问题之前,我的基本想法是为我的数据定义一个自定义类型,在Data.List.Split 中使用splitWidth 将每一行拆分为其字段,然后使用read 将每个字段转换为其正确的类型,尝试在实际实现中应用 this answer 中的功能优势。)

【问题讨论】:

  • 我不确定您在寻找什么。您提到了一次尝试,但未显示任何代码。你真的只想要myRead = read . ('0':) :: String -> Float吗?
  • @ThomasM.DuBuisson 谢谢,是的,应该这样做!您的 myRead 不适用于负数,但幸运的是我不必担心。

标签: parsing haskell decimal-point


【解决方案1】:

正如 Thomas M. DuBuisson 在上面的评论中回答的那样,显而易见的事情是 myRead = read . ('0':) :: String -> Float。这对我有用 --- 我永远不会尝试读取负数,而且我知道哪些字段应该被读取为浮点数。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2020-05-28
    • 2023-04-04
    • 2014-05-14
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多