2017-09-21 3 views
3

Ich möchte meine Funktion in einer Ganzzahl lesen und die Quadratwurzel auf die nächste ganze Zahl abgerundet zurückgeben. Dies ist, was ich versucht habe:Gemeinsame Nutzung von Stock und sqrt in Haskell

roundSqrt :: Int -> Int 
roundSqrt x = floor (sqrt x) 

Der Fehler, den ich bekommen ist „kann nicht ableiten (a Floating) von einem Einsatz von -sqrt entstehen '“, aber ich verstehe nicht, was das bedeutet.

Antwort

6

Die Art der sqrt ist:

λ> :t sqrt 
sqrt :: Floating a => a -> a 

Die Art des Bodens ist:

λ> ::t floor 
floor :: (RealFrac a, Integral b) => a -> b 

So sqrt braucht eine Art, die eine Floating Bedingung hat. Sie können die fromIntegral Funktion verwenden, das zu erreichen:

roundSqrt :: Int -> Int 
roundSqrt x = floor (sqrt (fromIntegral x)) 
+0

Sie dann loszuwerden, die vorformulierten durch die Zusammensetzung Operator: 'roundSqrt = Boden. sqrt. vonIntegral'. – chepner

Verwandte Themen