2017-03-23 11 views
2

ich konvertieren schrieb eine Funktion in HaskellWie von Float zu Int in Haskell

toInt :: Float -> Int 
toInt x = round $fromIntegral x 

Es soll in einem Float nehmen und die entsprechende Int zurückzukehren. Ich komme von einem C-Programmierhintergrund, und in C konnten wir es einfach als (int) x auffassen.

jedoch in diesem Fall erhalte ich den folgenden Compiler-Fehler

No instance for (Integral Float) 
arising from a use of `fromIntegral' 
In the second argument of `($)', namely `fromIntegral x' 
In the expression: round $ fromIntegral x 
In an equation for `toInt': toInt x = round $ fromIntegral x 

Irgendeine Idee, wie man dieses Problem beheben?

+0

Vielleicht können Sie dieses 'Runde 3.2 :: Int' versuchen. – Aleph0

+1

Wenn Sie eine Funktion suchen müssen, von der Sie den Typ 'Float -> Int 'kennen, können Sie nach Funktionen dieses Typs suchen, entweder auf [Hayoo] (http://hayoo.fh-wedel.de/?query= Float + -% 3E + Int) oder [Hoogle] (https://www.haskell.org/hoogle/?hoogle=Float+-%3E+Int+%2bbase&start=41#more) – Redu

Antwort

4

Ihre Typ-Annotation gibt an, dass x eine Float sein sollte, was bedeutet, dass es kein Parameter zu fromIntegral sein kann, da diese Funktion eine Integralfunktion übernimmt.

Sie könnten stattdessen passieren nur x zu round:

toInt :: Float -> Int 
toInt x = round x 

wiederum die abgespeckt werden können:

toInt :: Float -> Int 
toInt = round 

was bedeutet, dass Sie besser dran sein kann nur round mit zu beginnen , es sei denn, Sie haben eine spezielle Art der Rundung.

+0

Das hat funktioniert, danke. Ich fühle mich so albern, nachdem mir jemand eine Lösung in Haskell gesagt hat haha –