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 ])