我試圖編寫一個加載2個文本文件的程序,將這些文件中的數字轉換爲2個列表,然後計算這些列表之間的皮爾遜校正。Pearson與Haskell浮點類型衝突的相關
皮爾遜函數只能使用浮點數,所以我做了一個名爲floatconvert的函數來試圖解決這個問題,但它沒有。我收到一個錯誤,說「無法匹配預期類型'IO b0'與實際類型'浮動'。在'皮爾森'的第一個參數,即'輸入1'。「
任何幫助解決這個問題將不勝感激。
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 ])
添加型簽名的功能,並且錯誤信息將得到更接近,其中的錯誤是。 – dave4420