2
방금 haskell을 배우기 시작했고, 숫자가 제곱근인지를 검사하는 간단한 함수를 구현하려고 시도했다. 하스켈 형식 시스템을 이해하는 데 몇 가지 문제가 있다고 생각합니다. 내 유일한 다른 프로그래밍 경험은 루비와 자바입니다. 이것은 내가 지금까지 한 것입니다 (죄송 경우는 정말 바보) :Haskell 완벽한 사각형 찾기 - 타입 에러를 얻는다
isPerfectSquare :: (RealFloat t) => t -> Bool
isPerfectSquare n =
(sqrt n) == (truncate (sqrt n))
이 내가 루비에서하는 것입니다 ...하지만 여기 나에게이 오류 제공 :
Could not deduce (Integral t) arising from a use of `truncate'
from the context (RealFloat t)
bound by the type signature for
isPerfectSquare :: RealFloat t => t -> Bool
at more.hs:(73,1)-(74,35)
Possible fix:
add (Integral t) to the context of
the type signature for isPerfectSquare :: RealFloat t => t -> Bool
In the second argument of `(==)', namely `(truncate (sqrt n))'
In the expression: (sqrt n) == (truncate (sqrt n))
In an equation for `isPerfectSquare':
isPerfectSquare n = (sqrt n) == (truncate (sqrt n))
Failed, modules loaded: none.
당신이 수를 문제가 무엇인지, 문제를 해결하는 방법, 그리고 이해가되지 않는 기본 개념을 설명해주십시오. 미리 감사드립니다. 잘라야는 정수를 반환하는 동안 즉
truncate :: (RealFrac a, Integral b) => a -> b
는, SQRT는, 부동 소수점 숫자를 반환
sqrt :: Floating a => a -> a
잘라 내기 유형이 있습니다
덕분에,이 내가 찾던 정확히 무엇인가 ! 나는 배울 것이 많다고 생각합니다. – V9801