Я просто копаю немного в Haskell, и я начал с попытки вычислить Phi-Coffective двух слов в тексте. Однако я столкнулся с каким-то очень странным поведением, которое я не могу объяснить.Различные результаты при применении функции к равным значениям
После зачистки все вниз, я закончил с этим кодом, чтобы воспроизвести проблему:
let sumTup = (sumTuples∘concat) frequencyLists
let sumFixTup = (138, 136, 17, 204)
putStrLn (show ((138, 136, 17, 204) == sumTup))
putStrLn (show (phi sumTup))
putStrLn (show (phi sumFixTup))
Это выходы:
True
NaN
0.4574206676616167
Таким образом, хотя в sumTup
и sumFixTup
шоу, как равные, они ведут себя по-разному при переходе на phi
.
Определение phi
является:
phi (a, b, c, d) =
let dividend = fromIntegral(a * d - b * c)
divisor = sqrt(fromIntegral((a + b) * (c + d) * (a + c) * (b + d)))
in dividend/divisor
Как насчет определений 'sumTuples' и' FrequencyLists'? – Nefrubyr
Они несколько длинные, как вы думаете, это поможет их добавить? Я на самом деле явно набрал 'sumTuples' для' sumTuples :: [(Int, Int, Int, Int)] -> (Int, Int, Int, Int) '. –