2017-01-24 4 views
1

Klassisches Problem, aber in Haskell diesmal. Ich versuche dies die C Art und Weise zu tun, aber ich erhalte diesen FehlerDie Anzahl der Stellen einer ganzen Zahl in Haskell

Variable not in scope: numDigits :: Integer -> t 

Hier ist der Code, den ich

schrieb
numDigits :: Integer -> Integer 
numDigits n = toInteger (round (logBase 10 (fromIntegral n)) + 1) 

Habe ich etwas falsch gemacht? Oder log

+0

Was ist die Signatur von 'toInteger'? Kann mich nicht erinnern. Warum definieren Sie es nicht einfach als "Länge"? Show'? – Carcigenicate

+0

toInteger, weil Log Base 10 ein Double zurückgeben, nehme ich an? –

+0

Machst du das in einer REPL oder einer Quelldatei? – Carcigenicate

Antwort

1

FYI Ich habe gewählt, um zu schließen, weil Sie entweder einen Tippfehler gemacht haben oder versäumt haben, uns mit dem tatsächlichen fehlerhaften Code zu versorgen. Der betreffende Code ist gültig, aber Sie sollten angeben, wie Sie ihn laden und wie Sie ihn aufrufen.

Zur Demonstration:

% 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 
Verwandte Themen