【发布时间】:2021-12-23 14:34:26
【问题描述】:
我需要一个程序来接收包含八进制数的字符串并将其转换为十进制。如果 String 包含的不是 0 到 8 之间的数字,则该函数应返回 0。
这是我得到的:
octoDec :: [Char] -> Int
octoDec [] = 0
octoDec (x:xs) = ((digitToInt(x)) * 8 ^(length xs)) + octoDec xs
如果我输入 octoDec ['1','2','3'] 我会得到 83 ,这是预期的。但是,如何在不需要其他功能的情况下验证用户?
编辑:我已经设法构建了一个函数来检查一个数字是否只包含 0 到 7 之间的数字:
isOcto :: [Char] -> Bool
isOcto [] = True
isOcto (x:xs) | (digitToInt(x) > 0) && digitToInt(x) < 7 = isOcto (xs)
|otherwise = False
我想要的是将这两个函数合并为一个并将零返回为无效。
【问题讨论】:
-
“需要另一个功能”是什么意思?需要定义另一个顶级函数?需要使用其他功能?需要定义任何其他函数吗?
-
我希望在 octoDec 函数中检查八进制
-
Horner's Method 是一种更有效的计算值的方法。对于
n-digit 数字,您只需要 O(n) 次乘法而不是 O(n) 次幂运算。
标签: haskell functional-programming