簡體   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