我想在Haskell中编写一个函数,该函数可以执行以下操作:
getString:: String -> (String,Int)
getString "sum(6)" = ("sum",6)
getString "function1(10)" = ("function1",10)
它可以接受一个字符串,它是一个函数名称以及参数,并获得一个(函数名称,参数)元组。 我不知道如何在Haskell中进行操作。请提供一些建议。谢谢! 假设所有输入都是完美的形式,例如“ sum(6)”
答案 0 :(得分:7)
为您的函数提供这种类型有点误导,因为有许多输入字符串您无法为其生成正确的输出:
getString "f1i sh??"
应该返回吗?因此,通常我们会以某种方式丰富输出类型以表明它可能会失败:例如
getString :: String -> Maybe (String, Int)
为此,我建议使用break
或span
之类的函数来为您进行解析。像这样:
import Data.Char (isAlphaNum, isDigit)
import Text.Read (readMaybe)
getString :: String -> Maybe (String, Int)
getString s = case span isAlphaNum s of
(f, '(':arg) -> case span isDigit arg of
(x, ")") -> ((,) f) <$> readMaybe x
_ -> Nothing
_ -> Nothing