【问题标题】:Haskell Parse string of Ints to tuple (Int,Int)Haskell 将 Int 字符串解析为元组 (Int,Int)
【发布时间】:2017-11-13 14:37:49
【问题描述】:

我想将输入用户的 3 3 形式的字符串解析为元组 (3,3) 这可能吗?

stringtup :: String -> Maybe (Int, Int)
stringtup s = do
[(n, [c])] <- return $ reads s
return (n, c)

这是我的尝试,但它不起作用..

【问题讨论】:

  • 当然有可能,但请记住始终先添加一些代码来显示您的尝试和努力,提供更多上下文,(3,3 来自文本文件?来自用户的输入?),如果你不这样做,用户会否决这个问题......
  • 这是一个终端输入,问题不在于我如何获取信息.. 而是我可以使用任何字符串来完成,但如果你想要一个上下文,我有一个命令函数可以使用然后我在我的主目录中调用了几个命令。例如,我的一个函数需要来自命令 d 3 3 的输入 (x,y)。
  • 在这种情况下,我猜:“stringtup = ([a, b] -> (a, b)) .map read .words” 但是如果格式错误,则会抛出异常
  • 非常感谢!

标签: parsing haskell tuples


【解决方案1】:

reads 仅解析一个值(如果可能),并将其与输入字符串的其余部分 一起返回。所以,

    [(n, _)] <- return $ reads s

有效并且将会,因为"3 3" 确实有n≡3。

但其他数字仍然需要解析。所以你实际上要做的是首先绑定类似

    [(n, s')] <- return $ reads s

然后以相同的方式从s'解析另一个数字。

【讨论】:

  • stringtup :: String -> (Int, Int) stringtup s = do [(n, s')]
  • 与此类似。前提是您将其正确放置在 do 块中。但是您需要将两个 parsed 值作为最终结果。
猜你喜欢
  • 2013-01-22
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多