【问题标题】:How do i convert String into list of integers in Haskell如何将字符串转换为 Haskell 中的整数列表
【发布时间】:2012-02-11 08:35:02
【问题描述】:

我有一个String,比如"1 2 3 4 5"。如何将其转换为 Haskell 中的 [1,2,3,4,5] 等整数列表?如果列表是"12345"怎么办?

【问题讨论】:

  • -1,你可以添加你尝试过的代码吗?

标签: string list haskell


【解决方案1】:

你可以使用:

> [read [x] :: Int | x <- string]

【讨论】:

    【解决方案2】:

    在模块Data.Char 中定义了一个名为digitToInt 的函数。它接受一个字符并返回一个数字,只要该字符可以解释为十六进制数字即可。

    如果您想在第一个示例中使用此函数,其中数字由空格分隔,您需要避免使用空格。你可以用一个简单的过滤器来做到这一点

    > map digitToInt $ filter (/=' ') "1 2 1 2 1 2 1"
    [1,2,1,2,1,2,1]
    

    第二个例子,数字完全不分开,因为你不需要过滤器,所以更容易

    > map digitToInt "1212121"
    [1,2,1,2,1,2,1]
    

    我猜 digitToIntread 更好,因为它不依赖于表达式的类型,这可能很棘手(这反过来又是我如何发现这篇文章=P)。无论如何,我是haskell的新手,所以我可能错了=)。

    【讨论】:

      【解决方案3】:
      q1 :: Integral a => String -> [a]
      q1 = map read . words
      
      q2 :: Integral a => String -> [a]
      q2 = map (read . return)
      

      错误处理留作练习。 (提示:您将需要不同的返回类型。)

      【讨论】:

      • 我认为你的意思是 q2 = .. 不是 q2 ::
      【解决方案4】:

      你可以使用

      Prelude> map read $ words "1 2 3 4 5" :: [Int]
      [1,2,3,4,5]
      

      这里我们使用words"1 2 3 4 5" 拆分为空白,从而得到["1", "2", "3", "4", "5"]read 函数现在可以将单个字符串转换为整数。它具有Read a =&gt; String -&gt; a 类型,因此它实际上可以转换为Read 类型类中的任何内容,包括Int。正是由于返回类型中的类型变量,我们需要在上面指定类型。

      对于没有空格的字符串,我们需要将每个Char转换成一个单元素列表。这可以通过应用(:"") 来完成——String 只是Chars 的列表。然后我们像以前一样再次申请read

      Prelude> map (read . (:"")) "12345" :: [Int]
      [1,2,3,4,5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-04
        • 2019-04-16
        • 1970-01-01
        • 2022-12-18
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        相关资源
        最近更新 更多