我试图编写一个加载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