2 개의 텍스트 파일을로드하고, 그 파일의 숫자를 2 개의리스트로 변환 한 다음, 그리스트 사이의 피어슨의 상관 관계를 계산하는 프로그램을 작성하려고합니다.하스켈 플로트 타입 충돌과의 피어슨 상관
pearson 함수는 float 만 사용할 수 있으므로이 문제를 해결하기 위해 floatconvert라는 함수를 만들었지 만 아직이 문제를 해결하지 못했습니다. "예상 유형 'IO b0'을 실제 유형 'Float'과 일치시킬 수 없습니다.라는 오류 메시지가 나타납니다. 'pearson', 즉 'input1'의 첫 번째 인수에서 "
이 문제를 해결하는 데 도움이되는 모든 도움을 주시면 감사하겠습니다.
main = do
input1file <- readFile "input1.txt"
input2file <- readFile "input2.txt"
let input1 = floatconvert input1file
let input2 = floatconvert input2file
pearson input1 input2
floatconvert x = [ read a::Float | a <- words x ]
pearson xs ys = (psum-(sumX*sumY/n))/(sqrt((sumXsq-(sumX**2/n)) * (sumYsq-(sumY**2/n))))
where
n = fromIntegral (length xs)
sumX = sum xs
sumY = sum ys
sumXsq = sum([ valX*valX | valX <- xs ])
sumYsq = sum([ valY*valY | valY <- ys ])
psum = sum([ fst val * snd val | val <- zip xs ys ])
이 함수 타입의 서명을 추가하고 오류 메시지가 가까이 실수가 어디까지 얻을 것이다 : 당신이
pearson
에게 유형 서명pearson :: [Float] -> [Float] -> Float
를 부여했다 예를 들어, 당신은이 메시지를받은 것입니다. – dave4420