alphabetDistance/lib/Text/AlphabetDistance.hs

20 lines
449 B
Haskell

module Text.AlphabetDistance (
distance
, norm
) where
import Data.Char (toLower)
rank :: Char -> Int
rank c = 1 + fromEnum (toLower c) - fromEnum 'a'
norm :: String -> Float
norm "" = 0
norm (c:cs) = (fromIntegral (rank c) + norm cs) / 27
distance :: String -> String -> Float
distance "" "" = 0
distance "" s = norm s
distance s "" = norm s
distance (ca:sa) (cb:sb) = (abs $ fromIntegral (rank ca - rank cb) + distance sa sb) / 27