My attempt at Huffman encoding in Haskell ... not complete ... hardly...anyway, I now need to switch to Minix FS in fuse

type CharacterFrequencyTuple = (Int,Char)

repeats hello

= [(1,'e'),(1,'h'),(1,'o'),(2,'l')]

-}

repeats :: String -> [CharacterFrequencyTuple]

repeats string = quickSort $ zip counts uniqueLetters

where

counts = map (frequency string) uniqueLetters

frequency :: String -> Char -> Int

frequency (x:xs) c

| c == x = 1 + frequency xs c

| otherwise = frequency xs c

frequency _ c = 0

uniqueLetters = unique string

unique :: String -> String -- get the unique letters in the string

unique (x:xs) = [x] ++ unique [y | y <- xs, y /= x ]

unique [] = []

data Tree a = Node a (Tree a) (Tree a) | Leaf a

deriving (Show)

huffman :: [CharacterFrequencyTuple] -> Tree Char

huffman (x:xs) = Leaf 'A'

quickSort (x:xs) = l1 ++ [x] ++ l2 -- items less than x + x + items bigger than x

where

l1 = quickSort [y | y <- xs, y <>

l2 = quickSort [y | y <- xs, y >= x] -- sorted items greater than x

quickSort [] = []

main=do

x <- getLine

let y1=unique x

let y2=repeats x

putStrLn (show y1)

putStrLn (show y2)

## No comments:

Post a Comment