flattern :: [(Char, Int)] -> String
flattern [] = ""
flattern ((w,l):xs) = show l ++ w : flattern xs
这是什么反函数?有什么办法可以解决这个问题吗?这个函数的反函数是什么?
flattern :: [(Char, Int)] -> String
flattern [] = ""
flattern ((w,l):xs) = show l ++ w : flattern xs
这是什么反函数?有什么办法可以解决这个问题吗?这个函数的反函数是什么?
这不可逆的:
有无法通过此功能进行复制字符串(任何字符串不能以数字开始)。
它甚至不是部分可逆的。还有对应于多个输入的字符串:"1111"
可以由[('1',1),('1',1)]
或[('1',111)]
生成。
你确定这是倒转的功能,而不是像flattern ((w,l):xs) = replicate l w ++ flattern xs
?
如果你真的想要,你可以解析函数的输出,试图重构参数一定是什么。
import Text.ParserCombinators.Parsec
unflat1 :: Parser (Char, Int)
unflat1 = do
c <- anyChar
n <- many1 digit
return (c, read n)
readExpr :: String -> Either String [(Char, Int)]
readExpr input = case parse (many unflat1) "unflat" input of
Left err -> Left ("No match: " ++ show err)
Right val -> Right val
这八九不离十工作,只要flattern没有数字作为第一个输入。 类似flattern [('a',1), ('2',3)]
的内容将被解析为[(a, 123)]
。
真的不知道Haskell,我不认为这有一个反函数(严格意义上是反函数)。 – 2011-03-06 20:10:55
为什么这个标签为“工作”?哪些工作应用程序可能会出现这种神秘而可怕的题目? – 2011-03-06 20:51:35