繁体   English   中英

将字符串转换为元组,Haskell中的特殊格式

[英]Convert String to Tuple, Special Formatting in Haskell

对于测试应用程序,我正在尝试将特殊类型的字符串转换为元组。 字符串始终采用以下格式,其中一个int(n> = 1)后跟一个字符。

输入字符串的示例

"2s"

"13f"

"1b"

所需的输出元组(Int,Char)的示例

(2, 's')

(13, 'f')

(1, 'b')

任何指针将不胜感激。 谢谢。

您可以使用readS解析int并获取字符串的其余部分:

readTup :: String -> (Int, Char)
readTup s = (n, head rest)
  where [(n, rest)] = reads s

一个更安全的版本是:

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

这是一种实现方法:

import Data.Maybe (listToMaybe)

parseTuple :: String -> Maybe (Int, Char)
parseTuple s = do
  (int, (char:_)) <- listToMaybe $ reads s

  return (int, char)

这使用Maybe Monad表示可能的解析失败。 需要注意的是,如果(char:_)模式匹配失败(即,如果只有一个号码后无其他字符),这被转换为一个Nothing结果(这是由于要怎么do记号在Haskell工作,它调用。如果模式匹配失败,则Monadfail函数。如果是Maybe a ,则fail _ = Nothing )。 如果reads无法在输入的开头读取Int ,则该函数还将求值为Nothing 如果发生这种情况,则reads提供[] ,然后由listToMaybe变为Nothing

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM