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