2017-12-23 2 views
0

하스켈에서 간단한 함수를 썼습니다. 숫자가 작은 optimazation으로 소수인지 확인하고 싶습니다. 나는 어떻게어떻게 sqrt 타입의 Integral Floor를 얻을 수 있습니까?

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

그래서이 코드의 문제점은 무엇입니까? 그것은 나를 위해 작동합니다. – arrowd

+0

오류가 발생했습니다 : 'Integral'에 대한 하나 이상의 인수가 필요합니다. 'Integral'에 '* -> GHC.Prim.Constraint'유형이 있습니다. 'roundSqrt'의 유형 서명 : roundSqrt :: Integral -> Integral' – woljako

+0

아, Integral t => t -> t'이어야합니다. 또는 모든 유형 주석을 제거 할 수도 있습니다. – arrowd

답변

0

Integral이 typeclass입니다 올바른 roundSqrt를 작성하는 어떤 생각을 가지고 있지 않기 때문에 그것은 유형으로 사용할 수 없습니다. isPrime 유형 주석에 올바르게 사용했습니다. 따라서 작동 시키려면 쓸 내용을 작성해야합니다.

roundSqrt :: Integral t => t -> t 
관련 문제