函数在haskell中将Hex转换为Oct



我必须将任何十六进制数转换为十进制数。在另一个帖子上,我看到了这个代码

main = do
octStr <- getLine
let
val :: Integer
(val,_):_ = readOct octStr
hexStr = showHex val ""
putStrLn hexStr

对于Oct到Hex,但我不理解readOct函数。。

有人能向我解释或帮助我吗?

提前感谢:(

readOct有一个奇怪的类型,因为它意味着要与其他ReadS解析器有效地链接。这里有一个助手函数,可以使类似函数的使用变得简单:

runReadS :: ReadS a -> String -> Maybe a
runReadS f s = case f s of
[(x, "")] -> Just x
_ -> Nothing

如果只有一个有效的解析,并且它使用了整个输入,那么该函数将返回解析结果Just。否则(如果根本没有解析,如果有多个不明确的解析,或者如果字符串中还有未解析的位(,它将返回Nothing。然后,您可以在代码中以更简单的方式使用该函数,如下所示:

import Numeric
main = do
octStr <- getLine
case runReadS readOct octStr of
Nothing -> putStrLn $ octStr ++ " is not valid octal!"
Just val -> putStrLn $ octStr ++ " in octal is " ++ showHex val " in hexadecimal."

showHex函数看起来也很奇怪。它不是返回一些字符串str,而是有效地返回str ++,以实现高效的链接。

最新更新