2017-12-23 3 views
0

Ich schrieb einfache Funktion in Haskell, ich möchte überprüfen, ob die Nummer ist Prime mit kleinen Optimazation. Ich habe keine Ahnung, wie richtig roundSqrt schreibenWie bekomme ich Boden mit sqrt in Typ Integral

roundSqrt :: Integral -> Integral 
roundSqrt x = floor (sqrt (fromIntegral x)) 


isPrime :: Integral t => t -> Bool 
isPrime n = [i | i <- [2..k], n `mod` i == 0] == [] 
      where k = roundSqrt(n) 
+0

Also, was ist falsch mit diesem Code? Für mich geht das. – arrowd

+0

Ich bekomme Fehler: 'Erwartet ein weiteres Argument zu 'Integral' Erwartet einen Typ, aber 'Integral' hat Art '* -> GHC.Prim.Constraint' In der Typ-Signatur für 'roundSqrt': roundSqrt :: Integral -> Integral' – woljako

+0

Ah, es sollte 'Integral t => t -> t' sein. Oder entfernen Sie sogar alle Typ Anmerkungen. – arrowd

Antwort

0

Integral a typeclass ist, so sollte es nicht als eine Art verwendet werden. Sie haben es sogar korrekt in isPrime Typ Annotation verwendet. Also, damit es funktioniert, sollten Sie schreiben

roundSqrt :: Integral t => t -> t 
Verwandte Themen