Haskell中整数的位数
经典问题,但这次在哈斯克尔。我试着用C的方式来做,但是我一直得到这个错误Haskell中整数的位数,haskell,Haskell,经典问题,但这次在哈斯克尔。我试着用C的方式来做,但是我一直得到这个错误 Variable not in scope: numDigits :: Integer -> t 这是我写的代码 numDigits :: Integer -> Integer numDigits n = toInteger (round (logBase 10 (fromIntegral n)) + 1) 我做错什么了吗?或者记录,仅供参考,我投票关闭,因为您输入了错误或未能向我们提供实际失败的代码。所讨
Variable not in scope: numDigits :: Integer -> t
这是我写的代码
numDigits :: Integer -> Integer
numDigits n = toInteger (round (logBase 10 (fromIntegral n)) + 1)
我做错什么了吗?或者记录,仅供参考,我投票关闭,因为您输入了错误或未能向我们提供实际失败的代码。所讨论的代码是有效的,但是您应该指定如何加载它以及如何调用它 用于演示:
% cat so.hs
numDigits :: Integer -> Integer
numDigits n = toInteger (round (logBase 10 (fromIntegral n)) + 1)
% ghci so.hs
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /Users/tommd/.ghci
[1 of 1] Compiling Main ( so.hs, interpreted )
Ok, modules loaded: Main.
*Main> numDigits 1948
4
toInteger
的签名是什么?不记得了。另外,为什么不将其定义为length呢。show
?toInteger因为log Base 10返回一个Double我想?你是在REPL中还是在源文件中这样做?但是你是在试图在终端中用GHCI编写此代码吗?它实际上是说Integer->t
,还是在我的机器上输入了9999
,这是一个打字错误,算法是劣质的,但问题是如何在repl中加载和测试代码。